본문 바로가기

운영체제(OS) 부수기

[운영체제 부수기] 1. 운영체제의 개념과 구조 쉽게 이해하기 (2)

 

2024.11.13 - [운영체제(OS) 부수기] - [운영체제 부수기] 1. 운영체제의 개념과 구조 쉽게 이해하기

 

[운영체제 부수기] 1. 운영체제의 개념과 구조 쉽게 이해하기

운영체제(Operating System)의 개념 운영체제의 정의는 다음과 같다.A software that operates a computer system , 다시 말해 컴퓨터 시스템을 운영하는 소프트웨어를 뜻한다. 그렇다면 여기서 하드웨어에 해당

iamwhite.tistory.com

 

(1)편을 읽으면 이해가 더 쉽습니다!

 

 

운영체제의 역할

 

 운영체제(Operating System)란 쉽게 말해 "컴퓨터의 관리자" 이다. 조금 더 자세히 설명하면 운영체제는 중개자 역할을 수행하며 컴퓨터의 하드웨어를 관리하는 소프트웨어를 의미한다. 그렇다면 우리가 컴퓨터를 사용할 때 운영체제가 어떤 일을 담당할지 생각해보자.

 먼저 사용자문서 작성을 한다면 운영체제키보드를 입력을 처리하고 화면에 보여준다. 또 다른 사용자인터넷을 사용한다고 하면 이 때 운영체제네트워크 연결 관리의 역할을 수행한다. 만약 사용자게임을 실행하고 있다면? 운영체제그래픽 카드와 소리 출력 등을 관리하게 된다.

 

 

운영체제의 역할에 대한 공식적인 정의는 다음과 같다.

Operating System provides a basis for application programs and acts as an intermediary between the computer user and the computer hardware.
운영체제는 프로그램의 기초를 제공하고 컴퓨터 사용자와 컴퓨터 하드웨어 사이의 매개역할을 수행한다.

 


 

 

그렇다면 운영체제는 어떻게 작동할까? 


 

 컴퓨터 시스템은 크게 네 개의 층으로 구성되어 있다. 가장 아래에는 하드웨어 층이 있고, 그 위에 운영체제 층, 그 다음으로 프로그램 층, 그리고 가장 위에는 사용자 층이 있다.

 

 운영체제는 추상화 계층으로서, 시스템 프로그래밍이나 응용 프로그래밍이 OS와 통신할 때 하드웨어에 투명하게 접근할 수 있도록 해준다. 프로그램 층에는 다양한 종류의 프로그램들이 존재한다. 컴파일러와 같은 시스템 프로그램, 어셈블러, 텍스트 에디터, 데이터베이스 시스템과 같은 응용 프로그램들이 이에 해당한다. 운영체제는 이러한 모든 프로그램들에게 필요한 서비스를 제공하며, 사용자는 이러한 응용 프로그램들을 통해 시스템과 소통하게 된다.

 

 

 

운영체제의 핵심, 커널

 

 운영체제의 중심에는 커널(Kernel)이라는 핵심 요소가 있다. 커널은 컴퓨터가 켜져있는 동안 계속 작동하며 세 가지 핵심적인 역할을 수행하는 존재이다. 커널의 세 가지 역할은 다음과 같다.

  1. 프로그램들이 하드웨어를 사용할 수 있도록 중개
  2. 프로그램들 사이의 충돌 방지
  3. 컴퓨터 자원의 효율적인 분배

 

 

 흥미로운 점은 "운영체제는 Universally Accepted Definition(보편적 정의)이 존재하지 않는다"는 것이다. 어느 관점에서 보느냐에 따라 해석은 항상 바뀌게 된다. 책의 저자는 운영체제를 컴퓨터에서 항상 작동하는 프로그램 -The program running at all times on the computer-라고 정의한다. 이것은 다시 핵심 이라는 의미의 Kernel 이라고 불리며, 이 커널에서 시스템 프로그램과 어플리케이션 프로그램에 대한 인터페이스를 제공해준다.

 

 이처럼 운영체제는 우리가 컴퓨터를 사용할 때 눈에 보이지는 않지만, 모든 작업에 기반이 되는 필수적인 소프트웨어이다. 하드웨어를 직접 관리하고, 프로그램들의 실행 일정을 조율하며, 사용자가 컴퓨터를 편리하게 사용할 수 있도록 돕는 것이 바로 운영체제의 역할이다.

 

 

컴퓨터 시스템의 이해

 

 

1. 전통적인 컴퓨터 시스템(Typical Computer System)

 

 전통적인 컴퓨터 시스템은 하나 이상의 CPU와 여러 디바이스 컨트롤러들이 공통 버스(bus)를 통해 연결된 구조로 이루어져있다.

 이러한 구조에서 가장 먼저 실행되는 것이 부트스트랩 프로그램(Bootstrap program)이다. 부트스트랩 프로그램은 컴퓨터가 전원을 켬과 동시에 동작하는 첫 프로그램으로, 운영체제를 메모리에 로드하는 중요한 역할을 수행한다.

 

 

Bootstrap program is the first program to run on computer power-on

 

 

 

인터럽트(Interrupt)

 

 컴퓨터 시스템에서는 하드웨어와 CPU 간의 통신이 필수적이다. 이때 주로 인터럽트(Interrupts) 방식을 사용하게 된다. 인터럽트란 I/O 디바이스에서 특정 동작이 발생하면, 시스템 버스를 통해 CPU에 신호를 보내는 것을 의미한다. 더 발전된 형태로는 디바이스들이 직접 서로 통신하는 DMA(Directed Memory Access)라는 방식도 존재한다.

 

 

Hardware may triger an interrupt any time by sending a signal to CPU, usually by way of system bus.

 


 

 

2. 폰노이만 아키텍쳐(von Neumann architecture)와 현대적 구조

 

 현대 컴퓨터의 기본이 되는 폰노이만 아키텍처(von Neumann architecture)는 특별한 실행 사이클을 가지고 있다. 먼저 메모리로부터 명령어를 가져와 명령어 레지스터에 저장한다. 이후 해당 명령어를 해석하고, 필요한 경우 메모리에서 데이터를 가져와 내부 레지스터에 저장한다. 명령어가 실행된 후에는 그 결과가 다시 메모리에 저장된다.

  1. First fetches an instruction from memory and stores that instruction in the instruction register
  2. The instruction is then decoded and may cause operands to be fetched from memory and stored in some internal register
  3. After the instruction on the operands has been executed, the result may be stored back in memory

 

이러한 fetch-execute 사이클이 폰노이만 아키텍처의 핵심이다

 

 

- 저장장치(Storage System)의 계층구조

 

 컴퓨터의 저장장치는 성능과 비용을 고려한 계층적 구조를 가진다. 상위 계층의 저장장치는 빠른 접근 속도를 제공하지만 고비용이며, 하위 계층으로 갈수록 용량은 증가하지만 접근 속도가 느려진다. 이러한 계층 구조는 성능과 비용의 최적 균형을 이루는데 중요한 역할을 한다.

 

 

- 현대의 I/O 구조

 

 현대 컴퓨터 시스템의 I/O 구조는 복잡하면서도 효율적인 구조를 갖추고 있다. CPU는 캐시 메모리를 통해 RAM에 접근하고, I/O 디바이스들과 인터럽트를 통해 데이터를 주고받는다. 이러한 실행 과정을 'thread of execution'이라고 부른다.

흥미로운 점은 CPU가 실제로 처리하는 작업이 생각보다 적다는 것이다. 예를 들어, 네트워크로부터 데이터를 받는 것은 네트워크 컨트롤러가, 영상을 표시하는 것은 LCD 디바이스가 담당한다. CPU는 주로 특별한 상황(예: 영상 재생 중 오류 발생)에서만 개입하게 된다. 더욱이 디바이스들 간에는 DMA(Directed Memory Access)라는 방식을 통해 CPU의 개입 없이 직접 통신이 가능하다. 이러한 이유로 현대 운영체제 개발의 상당 부분이 I/O 관리와 디바이스 컨트롤러 개발에 집중되어 있다.

 

- 현대적 프로세서 구조

dual-core designed structure with two cores in the same chip

 

  현대 컴퓨터 시스템의 프로세서 구조는 크게 발전했다. CPU는 명령어를 실행하는 하드웨어이며, 이를 포함한 물리적 칩을 프로세서라고 한다. CPU 내의 실제 연산을 수행하는 기본 단위를 코어라고 부른다. 현대의 프로세서는 하나의 CPU에 여러 개의 코어를 포함하는 멀티코어 방식을 채택하고 있다. 예를 들어 코어가 2개면 듀얼코어, 4개면 쿼드코어라고 부른다.

 

 왼쪽 그림에서는 2 개의 코어를 가지고 있기 때문에 듀얼 코어에 해당한다.

 

 

 

symmetric multiprocessing architecture

 

 더 나아가 여러 개의 프로세서를 설치하는 멀티프로세서 구조도 있다. 특히 대칭형 멀티프로세싱 구조에서는 하나의 메모리에 여러 CPU가 연결되어 있으며, 각 CPU는 자체 레지스터와 캐시를 가지고 동등한 역할을 수행한다. 이러한 구조는 슈퍼컴퓨터에서 극대화되어, 수백만 개의 CPU를 동시에 활용하기도 한다. 이처럼 현대의 프로세서 구조는 단순한 연산 장치에서 복잡하고 효율적인 병렬 처리 시스템으로 발전했다.

 

 


 

 

3. 멀티프로그래밍과 멀티태스킹

 

 이러한 구조를 바탕으로 현대 컴퓨터는 여러 프로그램을 동시에 실행할 수 있는 능력을 가지고 있다. 이는 멀티 프로그램과 멀티태스킹이라는 두 가지 핵심 개념을 통해 실현된다. 

 

- 멀티프로그래밍(Multiprogramming)

 

 멀티프로그래밍은 여러개의 프로그램을 동시에 메모리에 올려놓고 동시에 실행시키는 것을 의미한다. 한 프로그램이 I/O 작업이나 다른 이유로 대기 상태에 들어갈 때, 다른 프로그램이 CPU를 사용할 수 있도록 하여 CPU의 유휴시간을 최소화한다. 이는 CPU의 사용 효율 뿐만 아니라 전체적인 시스템 효율성을 크게 향상할 수 있다.

 

 

Multiprogramming runs more than one program at a time and keeps several processes in memory simultaneously to increase cpu utilization.

 

 

- 멀티태스킹(Multitasking) = 멀티프로세싱(Multiprocessing)

 멀티태스킹은 멀티프로그래밍을 한 단계 확장시킨 개념이다. 이는 멀티프로세싱이라고도 불리며, CPU가 여러 작업 사이를 빠르게 전환하면서 실행하는 방식이다. 이때 사용되는 것이 바로 시분할(timesharing)기법이다. CPU는 각 작업에 아주 짧은 시간을 할당하고, 이 시간들을 번갈아가며 실행한다. 이 전환은 매우 빠르게 일어나기 때문에 사용자 입장에서는 모든 프로그램이 동시에 동작하는 것 처럼 보이게 된다. 결과적으로 각 프로그램과 실시간으로 상호작용할 수 있는 것이다.

 

Multitasking is a locigal extension of multiprogramming in which cpu switches jobs so frequently that users can interact with each job while it is running.

 

 

- CPU 스케줄링 (CPU Scheduling)

 이처럼 여러 프로그램이 동시에 실행 가능한 상태일 때, 시스템은 어느 프로세스를 다음에 실행할지 결정해야 한다. 이를 CPU 스케줄링(CPU Scheduling)이라고 하며, 이는 전체 시스템 성능에 직접적인 영향을 준다. CPU 스케줄러는 아래와 같은 사항을 고려하여 최적의 결정을 내린다.

  1.  각 프로세스의 우선순위
  2. 프로세스가 얼마나 오래 기다렸는지
  3. 얼마나 많은 CPU 시간이 필요한지
  4. 프로세스의 특성(I/O 중심인지, 계산 중심인지)
CPU Scheduling
If several processes are ready to run at the same time, the system must choose which porcess will run next

 

위와 같은 멀티프로그래밍과 멀티태스킹 시스템은 현대 컴퓨터의 핵심 기능이 되었다. 우리가 웹 브라우저로 인터넷을 서핑하면서 동시에 음악을 듣고 문서작업을 할 수 있는 것은 모두 이러한 기술들 덕분이다.

 


 

 

4. 시스템 보안과 가상화

 

 현대 컴퓨터 시스템에서는 여러 프로그램이 동시에 실행되기 때문에 시스템의 안정성이 매우 중요하다. 한 프로그램의 오류나 악성 코드가 전체 시스템에 영향을 미칠 수 있기 때문이다. 이러한 위험을 방지하기 위해 운영체제는 사용자 모드(User Mode)커널 모드(Kernel Mode)라는 두 가지 운영모드를 사용한다.

 이를 은행의 금고 시스템에 비유해보면 이해가 쉽다. 일반 고객(사용자 모드)은 금고에 직접 접근할 수 없고, 반드시 은행원(커널 모드)을 통해서만 금고를 이용할 수 있다. 사용자 모드와 커널 모드의 차이점을 살펴보면 아래와 같다.

 

사용자 모드(User Mode) 커널 모드(Kernel Mode)
일반적인 프로그램들이 실행되는 기본 모드 운영체제의 핵심 기능이 실행되는 모드
시스템의 중요한 자원에 직접 접근할 수 없음 시스템의 모든 자원에 직접 접근 가능
필요한 경우 운영체제에 서비스를 요청해야 함 시스템의 안정성과 보안을 책임짐

 

 

- 운영모드(two separate mode of operations)

 

 그림에서처럼 사용자 프로세스는 시스템 콜을 통해 운영체제에 서비스를 요청한다. 이때 커널모드로 전환하여 시스템 콜을 처리하고 유저 프로세스로 다시 전환한다. 이렇게 사용자 모드와 커널 모드로 나누어 운영함으로써 사용자 프로세스에서는 프로그램 실행에 방해를 받지 않게 되는 것이다.

 

 조금 더 쉽게 우리가 워드 프로세서에서 파일을 저장하는 상황을 예시로 들어볼 수 있다. 해당 과정은 아래와 같이 진행된다.

  1. 워드 프로세서(사용자 모드)가 파일을 저장하기 위해 시스템 콜 요청
  2. 시스템이 커널 모드로 전환
  3. 운영체제가 파일 저장 작업을 안전하게 실행
  4. 작업이 완료되면 다시 사용자 모드로 전환

 이러한 이중 모드 운영을 통해 시스템은 안정성과 보안을 유지하면서도 사용자에게 필요한 모든 기능을 제공할 수 있게 된다.

There are two seperate mode of operations that are user mode and kernel mode to ensure that an incorrect program cannot cuase other programs to execute incorrectly.

 

 

- 가상화(VIrtualization)

 현대 컴퓨터 시스템의 특징 중 하나는 가상화 기술이다. 이는 하나의 물리적 컴퓨터 하드웨어를 여러 개의 독립적인 실행 환경으로 추상화할 수 있게 해주는 기술이다. 이러한 가상화 기술의 발전은 멀티프로그래밍과 멀티태스킹의 개념을 한 단계 더 확장한 것으로 볼 수 있다.

 가상화 기술의 핵심에는 VMM(Virtual Machine Manager)이 있다. VMware, Xen, WSL(Windows Subsystem for Linux) 등이 대표적인 VMM의 예시이다. VMM은 마치 트래픽 관리자처럼 작동하며, 하나의 물리적 하드웨어 위에서 여러 운영체제가 동시에 실행될 수 있도록 조율한다.

 

전통적인 컴퓨터 시스템과 가상화 시스템은 다음과 같은 차이를 보인다

 

 

(a) 전통적 컴퓨터 시스템

 

  • 하드웨어 층 위에 하나의 커널이 존재
  • 커널이 여러 프로세스들을 직접 관리
  • 하나의 운영체제만 실행 가능

 

(b) 가상화 시스템

 

  • 하드웨어 층 위에 VMM이 존재
  • VMM 위에 여러 가상 머신(VM1, VM2, VM3)이 동작
  • 각 가상 머신에서 서로 다른 운영체제(예: 리눅스, 윈도우, 맥OS) 실행 가능
  • 컨텍스트 스위치를 통해 여러 운영체제를 동시에 실행

 

Virtualization is a techonology that allow us to abstract the hardware of a single computer into several different execution inviornmnets. 

 

 

 가상화 기술은 CPU 스케줄링의 개념을 운영체제 수준으로 확장한 것이다. 멀티프로그래밍이 여러 프로세스를 하나의 메모리에서 실행하고, 멀티태스킹이 시분할을 통해 이를 관리하듯이, 가상화는 여러 운영체제를 하나의 하드웨어에서 실행하고 관리한다. 이러한 가상화 기술은 현대 클라우드 컴퓨팅의 근간이 되어, AWS, Azure, GCP와 같은 클라우드 서비스를 가능하게 만들었다.

 


 

5. 사용자 인터페이스와 시스템 통신

 

 현대 컴퓨팅 환경은 매우 다양한 형태로 발전해왔다. 전통적인 컴퓨팅부터 모바일 컴퓨팅까지, 그리고 client-server 구조에서 peer-to-peer 시스템까지 다양한 형태가 존재한다. 특히 클라이언트-서버 시스템은 네트워크를 통해 서버와 여러 클라이언트(데스크톱, 랩톱, 스마트폰)가 연결되는 구조를 가진다. 반면 P2P 시스템은 중앙 서버 없이 클라이언트들이 직접 연결되어 통신하는 방식으로, 비트코인과 같은 시스템에서 활용된다.

 

- 클라우드 컴퓨팅(Cloud Computing)

 

클라우드 컴퓨팅

 

 클라우드 컴퓨팅(Cloud computing)은 현대 컴퓨팅 환경의 중요한 부분이 되었다. 클라우드 컴퓨팅에서는 사용자의 하드웨어가 단순히 네트워크를 통해 연결되는 인터페이스 역할만 수행하고, 실제 모든 컴퓨팅 자원(서버, 가상머신, 스토리지 등)은 클라우드에 존재한다. AWS, Azure, GCP와 같은 서비스들이 대표적인 예시이며, 이들은 소프트웨어 서비스(SaaS)와 플랫폼 서비스를 제공한다. 이러한 방식은 때로 '엣지 컴퓨팅'이라고도 불린다.

 

- 운영체제의 핵심 기능

 운영체제는 프로그램 실행을 위한 다양한 환경을 제공한다. 주요 기능에는 사용자 인터페이스 제공, 프로그램 실행 관리, 입출력 작업 처리, 파일 시스템 관리, 통신 기능, 오류 감지, 자원 할당, 로깅, 보안 및 보호가 있다. 특히 프로세스와 스레드의 개념이 매우 중요한데, 이들의 멀티프로세싱 과정에서는 동기화 문제가 발생할 수 있으며, 이를 제대로 해결하지 못하면 데드락이 발생할 수 있다.

 

- 사용자 인터페이스

 사용자가 운영체제와 상호작용하는 방식은 크게 세 가지가 있다. 첫째, CLI(Command Line Interface)는 sh, bash, csh, zsh 등의 쉘 프로그램을 통해 텍스트 기반으로 상호작용하는 방식이다. 둘째, GUI(Graphic User Interface)는 Windows, macOS의 Aqua, Linux의 KDE/GNOME과 같이 그래픽 기반의 인터페이스를 제공한다. 셋째, 터치스크린 인터페이스는 Android UI, iPhone UI처럼 터치를 통한 직관적인 조작을 가능하게 한다.

 

- 시스템 콜(System Call)

 

 응용 프로그램은 시스템 콜을 통해 운영체제와 통신하며, 이는 API(Application Programming Interface)의 형태로 제공된다. 예를 들어, unistd.h에 정의된 read 시스템 서비스가 대표적인 예시이다.

하지만 프로그래머가 매번 직접 시스템 콜을 사용하는 것은 비효율적이므로, 대부분 표준 라이브러리를 통해 이러한 기능들을 활용한다. printf와 같은 standard C 라이브러리 함수를 호출하면, 라이브러리 내부에서 필요한 시스템 콜들을 처리하고 결과를 반환하는 방식으로 동작한다.

System calls provide an interface to the services made available by the OS.

 

 

 

 이러한 다양한 인터페이스와 통신 방식을 통해 운영체제는 사용자와 하드웨어 사이의 효율적인 중개자 역할을 수행하며, 현대 컴퓨팅 환경의 복잡성을 추상화하여 사용자에게 직관적이고 효율적인 컴퓨팅 환경을 제공한다.

 

 

[참고] Siberschatz et. al., 「Operating System Concepts 10th Ed.