운영체제
컴퓨터 하드웨어를 관리하는 소프트웨어이며 유저, 응용 프로그램과 하드웨어간의 연결점(Intertace) 역할을 수행한다.
컴퓨터 시스템 구성
전통적인(classical) 컴퓨터 시스템은 하나 이상의 CPU와 다수의 디바이스 컨트롤러가 버스를 통해 연결되어 있다. 디바이스 컨트롤러는 특정 유형의 장치를 담당하며 로컬 버퍼 저장소와 특수 목적 레지스터 집합을 유지 관리한다. 장치 컨트롤러마다 장치 드라이버(device driver)가 있다. 이 장치 드라이버는 운영체제에게 장치에 대한 인터페이스를 제공한다.
인터럽트
CPU와 I/O 디바이스 간의 통신 방법 중 한가지로 하드웨어는 버스를 통해 CPU에 신호를 보내 인터럽트를 발생시킬 수 있다. CPU가 인터럽트되면 CPU는 하던 일을 중단하고 인터럽트 서비스 루틴을 실행한 후 원래 하던 일을 재개한다. 예를 들어 키보드의 키가 눌러졌을 때, 마우스가 움직였을 때, I/O 디바이스가 인터럽트를 발생시키고 CPU가 신호를 받아 처리한다.
폰노이만 아키텍처
CPU가 실행할 수 있는 명령어 집합을 정의하고 그 집합에 속한 명령어들로 구성된 컴퓨터 프로그램을 메모리에 로딩하면 명령어들을 CPU가 한번에 하나씩 수행한다.
폰노이만 아키텍처 시스템의 동작 방식, 아래 4단계의 사이클로 프로그램을 실행한다.
- fetch : 메모리로부터 명령어를 가져와 CPU의 IR(Instruction Resiter)에 저장한다.
- decode : 명령어를 해석하고 피연산자를 메모리부터 가져온 후 CPU의 특정 레지스터에 저장한다.
- execute : 명령어를 실행한다. ALU가 피연산자와 제어비트를 받아 산술/논리 연산을 수행한다.
- store : 연산 수행 결과를 메모리에 저장한다.
저장장치 구조
다양한 저장장치들을 저장 용량과 접근 속도에 따라 계층 구조로 표현할 수 있다. 위로 갈수록 CPU와 가깝고 접근 속도가 빠르지만 가격이 비싸다. 저장장치 시스템을 설계할 때는 가능한 한 많은 저렴한 비휘발성 저장장치를 제공하는 동시에 필요한 만큼의 비싼 메모리를 사용해야한다. 이는 경제성과 폰노이만 병목 현상 방지라는 두마리 토끼를 잡기 위함이다. CPU가 많이 참조하는 메모리일수록 접근속도가 빠른 메모리를 사용해야한다. 하지만 그런 메모리는 가격이 비싸기에 필요한 만큼만 사용하도록 설계한다.
부트스트랩 프로그램
컴퓨터에 전원이 들어오면 제일 먼저 실행되는 프로그램이며 메모리에 OS를 로딩하는 역할을 수행한다. OS가 메모리에 로딩되면 OS 프로그램이 실행된다. 보통 ROM에 부트스트랩 프로그램을 저장한다.
멀티 프로세서 시스템
과거에는 싱글 코어를 가진 하나의 CPU를 사용했기에 한번에 하나의 명령어 밖에 실행하지 못했다. 하지만 지금에 이르러서는 여러 개의 CPU를 사용하거나 혹은 멀티 코어로 구성된 CPU를 사용함에 따라 한번에 여러 개의 명령어를 실행할 수 있게 되었다. 이러한 시스셈을 멀티 프로세서 시스템이라 한다. 가장 일반적인 멀티 프로세서 시스템은 SMP(Symmetric Multi Processing)이다. SMP는 두 개 이상의 CPU가 한 개의 공유 메모리를 사용하는 구조이다.
멀티 프로세서 시스템은 멀티 코어 시스템으로 발전했다. 여러 개의 CPU를 두는 것 대신 하나의 CPU 칩안에 여러 개의 코어를 두는 멀티 코어 시스템은 칩 내 통신이 칩 간 통신보다 빠르다는 점과 여러 개의 단일 코어 칩보다 여러 개의 코어를 가진 칩이 더 작은 전력을 사용한다는 점 때문에 대부분의 컴퓨터 시스템에서 사용된다.
- CPU : 명령을 실행하는 하드웨어 (또는 프로세서와 같은 의미)
- 프로세서 : 하나 이상의 CPU를 포함하는 물리적인 칩
- 코어 : CPU의 기본 연산 단위
- 다중 코어 : 같은 CPU에 여러 코어를 포함함
- 다중 프로세서 : 여러 개의 프로세서를 포함함
멀티 프로그래밍, 멀티 태스킹
과거에는 OS와 함께 하나의 프로그램만 실행할 수 있었는데 이러다보니 CPU가 실제로 일을 하는 시간은 얼마 되지 않았다. (I/O 작업 동안 CPU가 놈) 그래서 CPU의 유휴 시간을 줄이기 위해 멀티 프로그래밍이 고안되었다. 멀티 프로그래밍이란 메모리에 여러 개의 프로그램을 올려 동시에 실행하는 것을 말한다. 멀티 태스킹은 멀티 프로그래밍의 논리적 확장으로 여러 개의 프로그램을 메모리에 올릴 수 있다면 멀티 태스킹이 가능하다. 멀티 태스킹은 CPU가 매우 빈번하게 작업을 전환하며 실행하는 것을 말한다. 멀티 태스킹이 가능한 시스템에서는 CPU의 시간을 잘게 잘라 프로세스를 번갈아가면서 실행해 프로세스들이 마치 동시에 실행되는 것처럼 보이게 하거나 (시분할 시스템) 입출력을 기다리는 동안 다른 프로세스를 실행한다.
결국 멀티 프로그래밍과 멀티 태스킹의 목표는 여러 프로그램을 동시에 실행함으로써 CPU의 유휴 시간을 낮추는 것이다. 이들을 실제로 구현하기 위해선 여러 프로세스가 메모리에 유지되는 메모리 관리 기법, 어떤 프로세스가 수행되어야할지 결정하는 CPU 스케줄링 기법 등이 필요하다.
- 프로세스 : 메모리(RAM)에 로딩된 프로그램
두 가지 연산 모드
잘못된 (또는 악의적인) 프로그램으로 운영체제 또는 시스템이 망가지는 걸 막을 필요가 있다. 이를 위해 컴퓨터 시스템은 모드 비트를 하드웨어에 추가하고 최소 두 가지 연산 모드인 사용자 모드와 커널 모드(수퍼바이저 모드, 시스템 모드, 특권 모드)로 명령어를 실행한다. 유저 모드에서는 제한된 명령어를 실행할 수 있으며 커널 모드에서는 특권 명령어(privileged instruction)을 비롯한 모든 명령어를 실행할 수 있다. 특권 명령어에는 잘못 사용되면 운영체제와 시스템에 악영향을 끼칠 수 있는 명령어들이 속한다.
모든 응용 프로그램은 사용자 모드에서 실행되고 운영체제는 커널 모드에서 실행된다. 응용 프로그램에서 특권 명령어를 사용할 수 없지만 대신 시스템 콜(System Call, OS의 API)을 통해 운영체제가 제공하는 서비스를 받을 수 있다. 아래와 같이 응용 프로그램에서 시스템 콜을 호출하면 커널모드로 전환되어 서비스 루틴이 실행된 후 복귀한다.
가상화
멀티 프로그래밍, 멀티 태스킹와 같이 프로세스를 여러 개 실행 할 수 있다면 OS도 여러 개 실행 할 수 있을 것이다. 한 대의 컴퓨터에 여러 개의 OS가 실행되도록 지원하는 기술을 가상화(Virtualization)라고 한다. 하드웨어 윗단에 VMM(Virtaul Machine Manager)가 위치함으로써 여러 OS를 실행 할 수 있다. VMWare, XEN, WSL 등이 VMM이다.
'Computer Science > OS' 카테고리의 다른 글
[OS - 4] IPC (0) | 2022.11.21 |
---|---|
[OS - 3] 프로세스 (0) | 2022.11.15 |
[OS - 1] 운영체제 개요 (1) (0) | 2022.11.02 |
컴파일 VS 인터프릿 (0) | 2022.08.11 |
환경 변수 (0) | 2022.08.09 |