본문 바로가기

CS 전공수업/컴퓨터 운영체제

[OS] 운영체제 기본

OS란?

사용자가 컴퓨터를 쉽게 다루게 해주는 인터페이스.

컴퓨터 하드웨어가 있고, 하드웨어를 사람이 사용하고자 할때 (어플리케이션을 통해 상호작용) 하드웨어와 사람 사이에서, 사람을 도와 하드웨어를 활용할 수 있게 도와주는 장치라고 생각하면 편하다.

참고로 운영체제 중에 소프트웨어를 추가로 설치할 수 없는 것을 firmware라고 명명함.

 

OS의 역할?

OS의 역할은 4가지로 크게 분류:

  1. CPU 스케줄링과 프로세스 관리: CPU 소유권을 어떤 프로세스에 할당할지, 프로세스의 생성과 삭제, 자원 할당 및 반환을 관리함.
  2. 메모리 관리: 한정된 메모리를 어떤 프로세스에 얼마만큼 할당할지 관리함.
  3. 디스크 파일 관리: 디스크 파일을 어떤 방법으로 보관할지 관리함.
  4. I/O 디바이스 관리: I/O 디바이스들 (마우스, 키보드, 컴퓨터) 과 컴퓨터가 데이터 주고받는 것을 관리함.

 

OS의 구조?

시스템콜 + 커널 + 드라이버 (+ GUI) 의 집합체라고 생각하면 된다.

아니, 그냥 "커널"과 친구들이라고 생각하자.

  • 시스템 콜: 응용 프로그램이 OS의 커널 서비스에 접근하기 위한 인터페이스. 파일을 열거나 메모리를 할당하는 등의 작업을 수행할 때 응용 프로그램이 직접 하드웨어에 접근하는 대신 시스템 콜을 통해 커널에 요청을 보냄. 자세히는, 유저 모드가 있고 커널 모드가 있다. 시스템콜이 작동될 때 modebit을 참고해서 유저모드와 커널모드를 구분한다. 
  • 드라이버: 하드웨어를 제어하기 위한 소프트웨어. 커널의 일부다. 드라이버는 하드웨어의 세부 사항을 추상화하여, 커널이 장치를 제어할 수 있게 함. ex_ 프린터 드라이버: 커널이 프린터와 통신할 수 있게 함.
  • 커널: 시스템 콜을 처리하고, 필요한 경우 드라이버를 통해 하드웨어와 상호작용함. 그러니까 커널이 몸통이다.

 

=> 다시 정리하면 이렇다.

 

그림에 의해 헷갈리지 말아야 할 것이, 유저는 응용 프로그램이 아닌 GUI를 통해 그 뒷단과 인터랙션한다.

유저는 "GUI"를 통해 명령을 입력하고, GUI는 입력을 "응용 프로그램"으로 전달하며, 응용 프로그램이 명령을 수행하면서 "커널"이 필요한 경우 커널에 명령을 전달하는 방식이 "시스템 호출"인 것이다. 그러면 커널은 시스템 콜을 처리하는데, 대부분의 경우 하드웨어를 다루는 일이다. 하드웨어를 다루기 위해서는 커널 자신의 일부인 드라이버를 활용해야만 하는 것이다. 심지어 네트워크 통신에 대해서도, 네트워크 드라이버를 통해 이뤄진다. 그렇다면 커널이 처리하는 일 중에 드라이버를 안 쓰는, 즉 하드웨어를 안 다루는 일이 있을까? 있다. 첫째, 바로 프로세스다. 프로세스 관련된 일들: 프로세스 스케줄링 및 관리 + 프로세스 간 통신 등의 일들은 하드웨어가 필요없다. 추가로, 가상 메모리 혹은 캐싱 관련한 것도 커널 내에서 드라이버 개입없이 처리됨. 이때, 시스템콜을 기준으로 유저쪽을 유저모드(1), 커널 쪽을 커널모드(0)라고 하는데, 시스템콜 호출까지는 유저모드에서 처리되고, 그 이하를 다룰 때는 커널모드가 켜진다. 다 끝나고 나서는 다시 응용 프로그램으로 돌아와서 하던 로직을 마무리한다. 유저모드와 커널모드는 동시에 시전될 수 없다. modebit이라는 bool 값으로 표현된다.

 

컴퓨터의 구조

CPU, DMA 컨트롤러, 메모리, 타이머, 디바이스 컨트롤러 등으로 이뤄져 있음.

 

CPU (Central Processing Unit) 란?

메모리에 존재하는 명령어를 해석해서 실행하는 일꾼.

제어장치 (Control Unit) + 레지스터 + 산술논리연산장치 (ALU) + 캐시 메모리 로 이뤄져있다.

 

Control Unit은 명령어 해석하고 실행 순서를 제어하고, ALU는 산술 및 논리 연산을 수행하고, 레지스터와 캐시에는 임시적으로 데이터를 저장한다. 기본적으로 CPU는 연속적인 "인터럽트"의 발생으로 돌아가는 구조다.

 

인터럽트가 발생하면 인터럽트 핸들러 함수가 모여 있는 인터럽트 벡터로 가서 그에 맞는 인터럽트 핸들러 함수가 실행된다. 인터럽트 간에는 우선순위가 있고 이에 따라 실행되며, 하드웨어 인터럽트와 소프트웨어 인터럽트(트랩)로 나뉜다.

 

DMA (Direct Memory Access) 란?

DMA 컨트롤러는 CPU 따까리인데, CPU의 개입 없이 메모리와 디바이스 간의 데이터 전송을 직접 관리한다.

I/O 디바이스가 메모리에 직접 접근할 수 있도록 하는 하드웨어 장치다. CPU에 몰리는 일을 분담해주는 역할.

 

메모리 (RAM, Random Access Memory)란?

메모리는 전자회로에서 데이터나 상태, 명령어 등을 기록하는 장치다. CPU가 계산을 담당한다면, RAM이 기억을 담당함.

고로 메모리가 크면 작업장이 큰 것이므로, 동시에 더 많은 일을 할 수 있는 것이다. 다음 포스트에서 깊이 다룰 것이다.

 

타이머란?

시간이 많이 걸리는 프로그램이 작동할 때 제한을 걸기 위해 존재함. 특정 시간을 정하여 제한하는 역할.

 

디바이스 컨트롤러란?

컴퓨터와 연결되어 있는 I/O 디바이스들의 작은 CPU를 말함. OS의 드라이버와 상호작용 함. 각각의 I/O에 붙어있는데, CPU와 I/O의 중간 다리 역할을 한다. I/O 장치의 미션이 완료되면 CPU에 인터럽트를 걸어 알려주는 등의 역할을 한다.