OS공부 - 운영체제의 개념과 구조

운영 체제의 정의

운영 체제 (Operating System)에 대해서 다시 정의를 짚어보고 넘어가자.

  • OS는 컴퓨터의 하드웨어를 manage하는 소프트웨어이다.
  • OS는 컴퓨터 유저와 컴퓨터 하드웨어간의 매개 역할을 수행한다.

이해를 돕기 위해 우리는 컴퓨터 시스템이 어떻게 구성되어 있는지 알아야 한다. 크게 4가지 component로 구성되어 있는데, 하드웨어, 운영체제, 응용 프로그램, 그리고 유저 이다. 유저가 행하는 다양한 프로그래밍이 접근하는 프로그램은 컴파일러, 어셈블러, 텍스트 에디터, 데이터베이스 시스템 등 다양하다. 이러한 시스템 프로그래밍 혹은 어플리케이션 프로그래밍을 할때 운영체제와 통신하면, 운영체제가 대신 하드웨어에 접근하는 방식으로 구성되어 있다. 아래의 그림을 참고하자.

image

공룡책의 저자는 운영체제를 정의함에 있어서 어떤 universally하게 받아들여지는 정의는 없다고 한다. 대신, 더 common한 정의를 가져왔는데, 이는 아래와 같다.

The one program running at all times on the computer. Usually called the kernel.

앞으로 우리는 운영체제에서 특히 kernel이라고 불리는 부분에서 어떠한 동작이 발생하는지에 대해서 주로 관심있게 공부할 것이다.

컴퓨터 시스템 구조

현대 컴퓨터 시스템은 하나 이상의 CPU를 가지고 있으며, 다양한 장치 컨트롤러들이 common bus를 통해 연결되어 있다. 아래의 그림을 참고하자. disk에는 HDD와 SSD가 사용되며, 마우스 키보드와 같은 Input 장치들과 프린터 모니터와 같은 Output 장치들 또한 메모리와 연결되어 있다.

image

Bootstrap

컴퓨터의 전원을 켜는 것을 우리는 부팅 한다고 표현한다. 이 때 컴퓨터를 동작시키는 프로그램이 바로 bootstrap 이라는 프로그램인데, 해당 프로그램이 해야할 역할은 당연하게도 OS를 불러와서 메모리에 로드하는 것이다. 그렇다면 bootstrap program은 어디에 저장되어 있을까? 휘발성 메모리에 부팅 시스템과 관련한 명령어들을 넣어 놓는다면, 부팅시마다 초기화 되기 때문에 큰일이 날 것이다. 그래서 이 중요한 프로그램은 EEPROM과 같은 불휘발성 메모리에 저장된다. 블휘발성 메모리는 전원이 끊어져도 기록된 데이터들이 소멸되지 않는 특성이 있다.

Interrupts

CPU와 I/O devices 사이에 통신하는 방법 중의 하나가 바로 interrupts이다. 예를 들어서 우리가 키보드로 A라는 문자를 눌렀다고 하자. 이를 CPU에게 알려 주기 위해 transfer을 진행하고, CPU는 하던 일 (user process) 을 멈추고 이를 받아들인다. 이러한 매커니즘이 마치 CPU의 현재 동작을 방해하는 것처럼 이루어지므로 Interrupt라는 이름에 참 알맞다. 아래의 그림은 Interrupt가 발생하는 타임라인을 개략적으로 표현한 것이다.

image

이처럼 Interrupts는 하드웨어에 의해 언제든 유발될 수 있으며 동작 방식은 간단하다. CPU에 특정 시그널을 보내는 것이다.

Storage Device Hierarchy

우리의 컴퓨터는 여러 종류의 저장 장치로 구성되어 있다. 프로그램의 목적에 따라 저장 장치를 활용하게 되는데, 예를 들어서 이전에 살펴본 Bootstrap은 RAM과 같은 휘발성 메모리에 저장되면 안될 것이다. 저장 장치들은 저장 용량과 엑세스 타임에 따라서 여러 개의 계층 구조를 가지고 있다. 아래의 그림을 참고하자.

image

메인 메모리는 우리가 흔히 이야기하는 RAM이다. 여기까지가 휘발성 메모리. 그 바로 아래부터 비휘발성 메모리로, ssd와 hdd같은 저장 디스크들, 그리고 더 아래로 내려가면 광학 디스크와 마그네틱 테잎과 같은 저장 장치들이 있다. 상위 계층으로 갈수록 작은 저장 용량을 가지지만 속도가 매우 빨라진다. 가격도 비싸다..

레지스터 (Register)

CPU 내에 위치한, 극히 소량의 데이터나 처리중인 중간 결과를 일시적으로 기억해 두는 고속의 전용 영역이며, 현재 수행하는 값을 기억한다. 그림 상 레지스터 위에 CPU가 있다고 이해하면 된다.

캐시 (Cache)

CPU와 메모리 사이에 자주 쓰는 것을 가까운 곳에 저장하기 위해 사용하는 메모리.
메인 메모리에 있는 데이터를 캐시 메모리에 불러와 두고, CPU가 필요한 데이터를 캐시에서 먼저 찾도록 하면, 시스템 성능을 크게 향상시킬 수 있다.

레지스터와 캐시의 차이는?
: 캐시CPU와 별도로 있는 저장 공간이며, 메인 메모리와 CPU 간의 속도 차이를 극복하기 위한 것이다. 반면 레지스터CPU 안에서 연산을 처리하기 위해 데이터를 저장하는 공간이다.

I/O Structures

아래 그림은 I/O 장치가 정보를 전달할때, CPU와 메모리에서 어떻게 동작하는지를 개략적으로 보여준다.

image

CPU에서 어떤 프로그램이 실행되면, 이는 캐시 메모리를 거쳐 메모리 영역의 명령어들과 데이터를 읽어온다. CPU가 I/O request를 device에 전달하면, device는 앞서 설명하였던 interrupt를 발생시키고, 이는 실행하고 있는 프로그램을 wait하게 하기도 한다. CPU의 연산이 불필요할 경우, device에서 직접 메모리로 정보를 주고받는 일종의 interrupt도 발생할 수 있는데 이를 Direct Memory Access (DMA) 라고 한다. 유튜브 동영상을 보는 것에 CPU가 열심히 계산할 필요는 없지 않을까? Network에서 데이터를 읽어서 그대로 모니터로 영상을 쏴주고, CPU는 가만히 있다가 사용자가 동영상을 멈춘다던지 뭔가 액션을 취할때만 연산을 해주면 더 효율적일 것이다.

컴퓨터 시스템 아키텍쳐

프로세서는 1개인데 코어가 여러 개 라는 것이 무엇을 의미할까? 쿼드코어를 넘어서서 8-코어 등의 용어를 우리는 많이 접해보았을 것이다. 아래의 개념을 먼저 짚고 넘어가자.

  • CPU (Central Processing Unit): 명령어를 실행하는 하드웨어 장치. 중앙 처리 장치.
  • Processor : 기본적인 명령어들을 처리하는 논리회로. 일반적인 PC환경에서 프로세서와 CPU는 같은 개념으로 보아도 무방하다고 한다.
  • Core : 각종 연산을 하는 CPU의 핵심 요소. 하나의 프로세서 안에 4개의 코어가 있다는 것은 4명이 분담해서 일을 처리한다고 이해하면 된다. Core의 종류는 ARM, MIPS, x86 등의 ISA (Instruction Set Architecture) 로 구별된다.

image

동일한 프로세서 칩에 여러 개의 코어가 있으면 멀티코어, 프로세서가 여려개 있으면 그게 바로 멀티프로세서 이다.

잠깐, ISA가 뭐지?
: CPU가 인식해서 기능을 이해하고 실행할 수 있는 기계어 명령어들의 set을 의미한다. 사용자가 실행한 응용 어플리케이션은 하단에 존재하는 알고리즘, 프로그래밍 언어, 어셈블리어, 기계어 등 소프트웨어 파트를 거쳐서 하드웨어 파트로 넘어가게 되는데 이때 소프트웨어와 하드웨어의 중재 역할을 하는 부분이 바로 ISA이다. 다시 말하면 최하위 레벨의 프로그래밍 인터페이스로, 프로세서 (cpu)가 실행할 수 있는 모든 명령어들을 포함한다.

운영 체제의 실제 운영 방식

운영 체제는 두 가지 모드로 나누어 운영을 하게 되는데, 이를 user modekernel mode 라고 한다.
user mode에서는 우리가 일반적으로 실행하는 프로그램들이 동작한다. 반면 kernel mode에서는 OS 코드를 실행한다. 이렇게 모드를 나누는 이유는, 유저가 혹시 잘못된 프로그램을 동작 시켰을 때 컴퓨터 전체의 동작이 망가지는 것을 대비하기 위함이다.

image

위의 그림을 보면 kernel mode가 언제 등장하는지 이해할 수 있다. 유저 프로세스는 user mode에서 실행되고 있다. 이때 유저 프로세스가 system call이라는 방식으로 OS를 부르면, 이때 trap이 발생하면서 kernel mode로 진입된다. 그리고 system call이 수행된 후 다시 user mode로 리턴된다. 이러한 seperate mode 동작 방식으로 OS는 의도치 않은 동작을 하는 프로그램이 자칫 다른 프로그램이나 디바이스에 영향을 주는 것을 원천적으로 차단할 수 있는 것이다.

마지막으로, 운영 체제가 어떤 서비스를 제공하는지 그림으로 살펴본다. 뭐 그냥 중요한걸 다 한다고 볼 수 있다.
OS 없으면 못살어~~

image