Home Operating System
Post
Cancel

Operating System

Clabho, Youl, Youjin과 함께 Kocw에서 제공하는 반효경 교수님의 운영체제 강의를 학습하며 작성한 글입니다. 잘못된 내용에 대한 지적이나 피드백은 언제든 환영입니다.

image







1. 운영체제


운영 체제(operating system, OS)는 컴퓨터 하드웨어와 소프트웨어 자원을 관리하는 시스템 소프트웨어로, 컴퓨터 프로그램을 위한 공통 서비스를 제공합니다. 이는 컴퓨터 시스템의 자원의 효율적 관리사용자가 시스템을 편리하게 사용할 수 있는 환경을 제공 하기 위해 존재합니다.

image

An operating system (OS) is system software that manages computer hardware and software resources, and provides common services for computer programs.









1-1. 자원의 효율적 관리

운영체제는 컴퓨터 시스템의 자원을 효율적으로 관리하는 역할을 합니다. 이를 통해 시스템의 성능을 최대화하고, 응답 시간을 최소화 합니다. 각 내용은 뒤에서 상세히 다루기 때문에 지금은 넘어가도록 하겠습니다.

   - 프로세서, 기억장치, 입출력 장치 등의 효율적 관리
   - 사용자간의 형평성 있는 자원 분배
   - 주어진 자원으로 최대한의 성능을 내도록
   - 사용자 및 운영체제 산이르 보호
   - 프로세스, 파일, 메시지 등을 관리 







1-2. 사용자가 시스템을 편리하게 사용할 수 있는 환경 제공

운영체제는 사용자와 하드웨어 사이의 중개자 역할을 하며, GUI와 멀티태스킹을 통해 직관적으로 여러 작업을 동시에 처리할 수 있도록 해줍니다. 이를 통해 하드웨어의 복잡성을 감추며, 보안과, 기본 장치 관리와 같은 편리한 기능을 지원합니다. 운영체제 덕분에 사용자는 이를 사용하는 것에만 집중할 수 있게 됩니다.









2. 운영체제의 분류


운영체제는 크게 동시 작업 가능 여부, 사용자의 수, 처리 방식에 따라 분류할 수 있습니다.




2-1. 동시 작업 가능 여부

운영체제는 동시 작업 가능 여부에 따라 주로 단일 작업 운영체제(Single-tasking system)와 멀티태스킹 운영체제(Multi-tasking operating system)로 분류됩니다.

A single-tasking system can only run one program at a time, while a multi-tasking operating system allows more than one program to be running concurrently. This is achieved by time-sharing, where the available processor time is divided between multiple processes.






단일 작업 운영체제는 한 번에 하나의 작업만 처리할 수 있는 시스템으로, 사용자는 한 작업이 완료되기 전까지 다른 작업을 시작할 수 없습니다. 초기 버전의 MS-DOS 같은 운영체제가 대표적으로, 이러한 방식은 현대의 다양한 작업을 동시에 수행하기에는 부적합 합니다. 반면 멀티태스킹 운영체제는 여러 작업을 동시에 처리할 수 있도록 설계되었습니다. 문맥 교환(Context Switching)을 통해 CPU의 처리 능력을 극대화 하며, 여러 프로그램이나 작업을 번갈아 가며 빠르게 처리합니다. 이를 통해 사용자는 여러 애플리케이션을 동시에 실행하거나, 하나의 애플리케이션 내에서도 여러 작업을 병렬로 수행할 수 있습니다.

Windows, macOS, Linux와 같은 현대 운영체제들은 모두 멀티태스킹을 지원합니다.









2-2. 사용자 수

운영체제는 사용자의 수에 따라 단일 사용자 운영체제(Single-user operating systems)와 다중 사용자 운영체제(multi-user operating system)로 나뉩니다. 단일 사용자 운영체제는 한 번에 한 명의 사용자만 시스템을 사용할 수 있는 시스템을 말하는데, 사용자를 구별하는 기능이 없지만 멀티태스킹은 가능합니다. 반면 다중 사용자 운영체제는 여러 사용자가 동시에 시스템에 접근하고 작업을 수행할 수 있으며, 각 사용자는 시스템에서 독립적인 환경을 가집니다.

Single-user operating systems have no facilities to distinguish users but may allow multiple programs to run in tandem. A multi-user operating system extends the basic concept of multi-tasking with facilities that identify processes and resources, such as disk space, belonging to multiple users, and the system permits multiple users to interact with the system at the same time.









2-3. 처리 방식

운영체제는 처리 방식에 따라 주로 일괄 처리(batch processing) 시스템과 대화식(interactive) 시스템으로 분류될 수 있습니다.



일괄 처리 시스템에서는 여러 작업을 순서대로 한 번에 모아서 처리 합니다. 이는 특정한 작업들을 순차적으로 자동으로 실행하는데, 초기 컴퓨터 시스템에서는 메모리와 계산 능력의 제약으로 일괄 처리 방식이 주로 사용되었습니다. 이는 한 번에 모든 작업을 처리하므로 시스템 자원을 효율적으로 사용할 수 있지만, 작업 도중 에러가 발생하면 전체 작업을 중단해야 하며, 높은 우선순위의 작업이 늦게 도착한 경우 그 작업을 즉시 처리하기 어렵다는 단점이 있습니다.

Computerized batch processing is a method of running software programs called jobs in batches automatically. While users are required to submit the jobs, no other interaction by the user is required to process the batch. Batches may automatically be run at scheduled times as well as being run contingent on the availability of computer resources.






대화식 시스템은 사용자의 입력을 즉시 처리하고 결과를 반환 합니다. GUI를 기반으로 한 운영체제 대부분이 이 방식을 사용하며, 사용자는 마우스, 키보드 등의 입력 장치를 통해 명령을 내리고 시스템은 그에 따른 결과를 보여줍니다. 이는 사용자와의 상호작용이 활발하게 이루어져 작업의 효율성과 사용자 만족도가 높아지지만, 동시에 여러 작업을 관리하거나 자주 사용자의 입력을 확인해야 하므로 시스템 자원을 많이 사용하는 단점이 있습니다.

Interactive media normally refers to products and services on digital computer-based systems which respond to the user’s actions by presenting content such as text, moving image, animation, video and audio. Since its early conception, various forms of interactive media have emerged with impacts on educational and commercial markets. With the rise of decision-driven media, concerns surround the impacts of cybersecurity and societal distraction.









3. 학습 키워드


강의 도중 Multitasking, Multiprogramming, MultiProcessor, Time sharing의 개념에 대해 언급해주셨는데, 이 차이점에 대해 살펴보겠습니다.





3-1. Multitasking

멀티 태스킹(Multitasking)은 하나의 컴퓨터가 여러 작업을 동시에 처리하는 기능입니다. 운영체제는 CPU 시간을 여러 프로세스에 분배하여, 각각의 프로그램이 거의 동시에 실행되는 것처럼 만듭니다.

image

In computing, multitasking is the concurrent execution of multiple tasks (also known as processes) over a certain period of time. New tasks can interrupt already started ones before they finish, instead of waiting for them to end. As a result, a computer executes segments of multiple tasks in an interleaved manner, while the tasks share common processing resources such as central processing units (CPUs) and main memory.









멀티 태스킹은 문맥 교환(Context Switching)을 통해 작업들 사이를 빠르게 전환합니다. 이를 통해 CPU 사용의 효율성을 높이고 응답 시간을 줄이지만, 리소스 경쟁이나 프로그램 간의 상호작용으로 인한 복잡성이 증가할 수 있습니다. 멀티 태스킹은 다음과 같은 특징이 있습니다.

    - 문맥 교환 (Context Switching)
    - 병렬성 (Parallelism)
    - 선점형 다중 작업(Preemptive multitasking)
    - Cooperative multitasking

멀티 태스킹의 특징에 대해서도 뒤에서 상세히 다루기 때문에 간략한 특징만 짚고 넘어가도록 하겠습니다.









멀티 태스킹은 top, htop, ps 등의 명령어를 통해 터미널에서 확인할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
$ top
Processes: 835 total, 2 running, 833 sleeping, 6956 threads                                                                                                               10:44:48
Load Avg: 2.67, 3.23, 3.68  CPU usage: 4.5% user, 3.14% sys, 92.80% idle   SharedLibs: 533M resident, 90M data, 41M linkedit.
MemRegions: 1805995 total, 11G resident, 129M private, 8907M shared. PhysMem: 32G used (4053M wired, 3986M compressor), 30M unused.
VM: 170T vsize, 3525M framework vsize, 18386988(0) swapins, 21422719(0) swapouts.     Networks: packets: 13743534/10G in, 9635086/1986M out.
Disks: 9743542/178G read, 8593910/208G written.

PID    COMMAND      %CPU TIME     #TH    #WQ  #PORT MEM    PURG   CMPRS  PGRP  PPID  STATE    BOOSTS          %CPU_ME %CPU_OTHRS UID  FAULTS     COW     MSGSENT    MSGRECV
416    iTerm2       31.0 10:34.61 9      6    455+  217M+  5872K  95M-   416   1     sleeping *0[14777]       0.41955 1.34779    502  5258703+   3223    1708410+   1013049+
1694   com.docker.h 11.3 06:09:42 17     0    42    10G    0B     1201M  1617  1690  sleeping *0[1]           0.00000 0.00000    502  532632192+ 469     2387       549
434    idea         7.2  03:34:05 641    6    1962- 6659M  3760K  3227M  434   1     sleeping *0[10196]       0.03747 0.00000    502  25202946+  98391   34054283+  20782204+
21354  Google Chrom 7.2  15:15.85 28     1    416   387M-  0B     135M   401   401   sleeping *0[8]           0.00000 0.00000    502  1845259+   26182   3881241+   1188481+









htop 명령어를 사용하면 다음과 같이 조금 더 사용자 친화적인 UI를 볼 수 있습니다.

image









또한 ps 명령어로 이를 볼 수도 있습니다.

1
2
3
4
5
6
7
8
$ ps
  PID TTY           TIME CMD
2417 ttys001    0:00.23 -zsh
6344 ttys004    0:00.46 /bin/zsh -il
68427 ttys004    0:00.01 /usr/local/git/libexec/git-core/git-credential-cache--daemon /Users/jjw/.cache/git/credential/socket
74996 ttys004   14:57.77 ruby /usr/local/lib/ruby/gems/3.1.0/bin/jekyll serve
71279 ttys011    0:00.26 /bin/zsh --login -i
27357 ttys013    0:00.19 -zsh









3-2. Multiprogramming

멀티프로그래밍(Multiprogramming)은 여러 프로그램이 메모리에 올라온 상태에서, 한 프로그램이 I/O 작업을 수행하는 동안 CPU는 다른 프로그램을 실행시키는 시스템을 말합니다. 즉 CPU를 최대한 활용해 많은 작업을 하게끔 합니다.

Multiprogramming in an operating system as the name suggests multi means more than one and programming means the execution of the program. when more than one program can execute in an operating system then this is termed a multiprogramming operating system.






멀티프로그래밍의 주요 특징은 다음과 같습니다.

    - CPU 활용 극대화: 한 프로그램이 I/O 작업을 대기하는 동안 CPU는 다른 프로그램을 실행시킬 수 있습니다.
    - 메모리 관리: 여러 프로그램이 메모리에 동시에 올라오기 때문에, 메모리를 효율적으로 관리합니다.
    - 작업 스케줄링: 운영체제는 CPU 시간을 효율적으로 분배하기 위해 스케줄링 알고리즘을 사용합니다.
    - 보호/격리: 프로그램 간 간섭, 충돌을 방지하기 위해 이를 관리합니다.









3-3. MultiProcessor

멀티 프로세서(MultiProcessor)는 두 개 이상의 CPU를 하나의 컴퓨터에서 운용 하는 것 입니다. 이를 통해 컴퓨터의 성능을 향상시키고, 시스템의 가용성을 높이며 병렬 연산을 가능하게 합니다. 동시에 여러 작업을 수행할 수 있기 때문에 높은 처리량과 짧은 응답 시간을 기대할 수 있으며, 고가용성(High Availability, HA), 확장성(Scalability) 등의 특징을 가집니다.

Multiprocessing is the use of two or more central processing units (CPUs) within a single computer system. The term also refers to the ability of a system to support more than one processor or the ability to allocate tasks between them.






고가용성은 하나의 프로세서에 문제가 발생하더라도, 다른 프로세서가 그 작업을 수행하면 시스템의 동작에 문제가 없는 것을 말합니다. 이를 통해 시스템의 연속된 운영을 보장하고 안정성을 높일 수 있습니다.

High availability (HA) is a characteristic of a system that aims to ensure an agreed level of operational performance, usually uptime, for a higher than normal period.






확장성은 필요에 따라 시스템의 성능을 향상시키기 위해 프로세서를 추가할 수 있는 것을 가리킵니다. 이를 통해 작업 처리 효율을 높일 수 있으며, 사용자의 높은 요구사항을 충족시킬 수 있습니다.

Scalability is the property of a system to handle a growing amount of work. One definition for software systems specifies that this may be done by adding resources to the system.






멀티 프로세서가 메모리 접근할 때 주로 UMANUMA 두 가지 모델이 존재하는데, UMA는 모든 프로세서가 메모리에 동일한 속도로 접근하는 구조를 의미합니다. NUMA는 각 프로세서에 연결된 지역 메모리를 가지며, 프로세서가 자신의 지역 메모리에는 빠르게, 다른 프로세서의 메모리에는 상대적으로 느리게 접근합니다.

캐시 일관성 문제는 멀티프로세서 시스템에서 주요한 고려 사항 중 하나입니다. 여러 프로세서의 캐시 안에 동일한 메모리 위치에 대한 정보가 존재할 수 있기 때문에 이를 일관되게 유지해야 합니다.









3-4. Time-Sharing

시 분할(Time-Sharing)은 컴퓨팅 리소스를 여러 작업 또는 사용자 간에 공유하는 것으로, 단일 사용자에 의한 멀티태스킹을 가능하게 하거나 여러 사용자 세션을 가능하게 합니다. 이는 각 사용자에게 작은 시간 단위로 자원을 할당하며, 빠른 문맥 전환으로 각 사용자는 자신만이 시스템을 사용하는 것처럼 느끼게 됩니다.

In computing, time-sharing is the sharing of a computing resource among many tasks or users. It enables multi-tasking by a single user or enables multiple user sessions.






이는 멀티 태스킹과 비교해서 보면 좋은데요, 시분할은 여러 사용자가 하나의 시스템을 동시에 공유하면서 사용하는 것에 중점을 두며, 멀티태스킹은 주로 단일 사용자가 여러 작업을 동시에 수행하는 것에 중점을 둡니다. 멀티 태스킹은 하나의 컴퓨터에서 여러 작업이나 프로그램을 동시에 실행하는 기능을 의미하는데, 우리가 문서를 작성하는 동안 음악을 듣거나 인터넷을 사용할 수 있는 것은 컴퓨터가 멀티 태스킹을 지원하기 때문입니다. 컴퓨터는 빠르게 여러 태스크를 전환하여, 사용자에게는 여러 작업이 동시에 진행되는 것처럼 보이게 만듭니다. 현대의 운영 체제들은 대체로 두 개념을 모두 지원하며, 두 기능이 혼합되어 사용됩니다.

image

시 분할은 다음 그림과 같이 컴퓨팅 리소스를 여러 작업 또는 사용자 간에 공유합니다.









4. Shell


쉘(Shell)은 사용자와 운영체제 사이의 인터페이스로 작용하는 프로그램입니다. 주로 CLI(텍스트 기반 명령 줄 인터페이스)를 제공하며, 사용자의 명령을 해석하고 운영체제에 전달합니다.

In computing, a shell is a computer program that exposes an operating system’s services to a human user or other programs. In general, operating system shells use either a command-line interface (CLI) or graphical user interface (GUI), depending on a computer’s role and particular operation. It is named a shell because it is the outermost layer around the operating system.









사용자가 터미널에 명령어을 입력하면 이는 곧바로 운영체제로 가는 것이 아니라 쉘을 통해 운영체제에 전달됩니다. 쉘은 해당 명령어를 해석하고 이를 수행하는데, 여기에는 파일 조작, 프로세스 관리, 네트워킹 작업 등의 다양한 작업이 있습니다. 사용자가 명령어를 입력하면 쉘은 이를 토큰화해 명령, 옵션, 인자로 구분하며, 이후 $PATH 환경 변수를 참조해 해당 명령어가 내장인지 또는 어느 경로의 프로그램인지 확인합니다. 이후 명령어를 발견하면 이를 실행하기 위한 프로세스를 생성하고 결과를 터미널에 나타냅니다.

image









각 명령어들은 Mac 기준 아래 경로에 바이너리 형태로 저장되어 있습니다.

    - /bin/: ls, cp, mv와 같은 기본적인 명령어들이 저장되어 있습니다.
    - /sbin/: 시스템 관리 관련 명령어들이 저장되어 있습니다.
    - /usr/bin/: 사용자 명령어들이 저장되어 있습니다.
    - /usr/sbin/: /sbin/과 유사한 시스템 관리 관련 명령어들이 저장되어 있습니다.
    - /usr/local/bin/: 사용자가 추가로 설치한 프로그램의 실행 바이너리가 종종 저장 됩니다.









4-1. 특징

쉘의 장점 중 하나는 I/O 리다이렉션파이프를 통해 입력과 출력의 흐름을 사용자가 원하는 방향으로 바꿀 수 있다는 점입니다. 이는 사용자의 명령이 운영체제로 전달되기 전 쉘을 거치기 때문에 특정 작업/연산을 추가/변형 할 수 있는 것입니다. I/O 리다이렉션은 표준 입력, 표준 출력, 표준 에러 출력의 흐름을 변경할 수 있게 해주는 것을 말하며, 파이프는 한 명령어의 표준 출력을 다른 명령어의 표준 입력으로 전달하는 기능을 말합니다. 이를 통해 특정 프로그램의 출력을 파일에 저장하거나, 두 프로그램 사이에 데이터를 중계하는 파이프라인을 구성하는 것이 가능합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 출력물 저장
echo "Hello, World!" > hello.txt

# 정렬
sort < hello.txt

# 정렬 후 중복 제거
cat hello.txt | sort | uniq

# 정렬 후 중복 제거 후 파일 작성
cat hello.txt | sort | uniq > sorted_hello.txt

# 에러 로그 출력
application 2> errors.log









또한 쉘을 사용하면 백그라운드 작업 관리 여러 프로세스나 명령을 동시에 실행할 수 있습니다. 특정 작업을 백그라운드에서 실행시키거나, 이미 실행 중인 작업을 일시 중지하거나 종료하는 등의 작업 관리 기능을 활용하여 다양한 작업을 효율적으로 처리하는 것입니다. 예를 들어 작업 시간이 오래 걸리는 파일 읽기/쓰기 작업을 할 때, 이를 백그라운드로 실행시켜 놓고 다른 작업을 하면 병렬로 일을 처리할 수 있습니다.

1
2
# 사용자가 명령을 백그라운드에서 실행시키려면 명령어 뒤에 &를 붙여 실행하면 됩니다.
$ ./long_running_script.sh &

이 외에도 프로그래밍, 사용자 환경 설정, 프롬프트 등의 개념/기능이 있는데 별도로 학습 해보실 것을 권장드립니다.









4-2. 쉘의 종류

쉘에도 C Shell, Z Shell, Fish Shell 등과 같이 다양한 종류가 있는데요, 간단하게 몇 가지만 살펴보겠습니다.



C Shell(csh)은 Unix 환경에서 작동하는 커맨드 라인 인터페이스로, 1970년대 후반 캘리포니아 버클리 대학교에서 Bill Joy에 의해 개발되었습니다. 이는 C 언어와 유사한 문법 구조를 가지며, C Shell의 스크립팅도 사용할 수 있습니다. 하지만 복잡한 작업에는 다소 한계가 있습니다. 이는 명령어 히스토리 기능을 지원하는데, 사용자가 입력한 이전 명령어들을 추적하고, 그것들을 쉽게 재사용할 수 있게 만들어 줍니다. 또한 별칭(Alias)을 통해 사용자가 자주 사용하는 명령어나 복잡한 명령어를 치환해서 편하게 사용할 수 있게 합니다.

이후 csh가 가진 한계점을 극복하기 위해 tcsh라는 확장 버전이 등장하기도 했습니다.





Z Shell(zsh)은 Unix 기반 시스템의 쉘로, 1990년대 초 Paul Falstad에 의해 개발되었습니다. 이는 Bourne Shell의 확장판이며, Korn Shell(ksh) 및 Bash(bash)의 주요 특징들을 포함하고 있습니다. zsh은 자동 완성 기능을 제공하며, 명령어나 파일 경로를 입력하는 과정에서 선택지를 실시간으로 알려줍니다. 또한 Oh My Zsh와 같은 프레임워크와 연동해 테마와 플러그인을 통한 개인화와 확장성을 제공합니다. 별칭, 히스토리 검색, zsh만의 확장 가능한 문법, 명령어 치환 등 다양한 문법적 지원을 하며, 조건부 테스트, 스크립팅 등 다양한 기능들을 제공합니다.

macOS Catalina(10.15)부터 Apple은 기본 쉘로 bash 대신 zsh(Z shell)를 사용하고 있습니다. Oh My Zsh는 zsh 쉘의 프레임워크로, zsh의 사용자를 위한 다양한 플러그인, 테마, 그리고 유용한 함수들을 제공합니다. Robby Russell에 의해 시작되었고, GitHub에서 오픈소스로 관리되고 있습니다.





Fish(Friendly Interactive Shell)는 사용자 친화적 대화형 쉘로 Unix-like 운영체제에서 사용됩니다. 자동 완성, 구문 강조, 웹 기반 구성을 위한 사용자 친화적 인터페이스가 특징이며, 오픈 소스로 Github에서 관리되고 있습니다.









현재 우리가 사용하고 있는 쉘의 종류를 보기 위해서는 아래와 같은 명령어를 입력하면 됩니다.

1
2
3
4
5
6
7
8
# 현재 사용중인 쉘 확인하기
$ echo $SHELL
/bin/zsh

# 현재 실행 중인 인터랙티브 쉘 확인하기
$ ps -p $$
  PID TTY           TIME CMD
27357 ttys013    0:00.19 -zsh









5. 정리


운영체제는 하드웨어와 사용자 애플리케이션 중간에서 자원을 효율적 사용, 사용자의 편리한 시스템 사용을 도와 줍니다. 이는 동시 작업 가능 여부, 사용자 수, 처리 방식에 따라 구분할 수 있습니다.


This post is licensed under CC BY 4.0 by the author.