Booting
- Starting a computer by loading the kernel
Operating System Services
- 사용자에게 유용한 기능을 제공하는 OS 서비스의 집합
① User Interface
- 사용자와 컴퓨터 시스템이 만나는 지점
- Command-Line Interface (CLI), Graphics User Interface (GUI), Batch
cf> CLI : 사용자가 텍스트 명령을 통해 명령을 내리는 인터페이스
② Program Execution (프로그램 실행)
- 시스템은 메모리에 프로그램을 로드하고, 그 프로그램을 실행시키고, 강제적이든 그렇지 않든 실행을 끝낼 수 있어야 한다.
③ I/O Operations (입출력 명령)
- 입출력 명령을 수행
- 효율과 보안을 위해 운영체제를 거치도록 한다.
④ File-system Manipulation (파일-시스템 조작)
- Programs need to read and write files and directories, create and delete them, search them, list file information, permission management.
⑤ Communications (통신)
- 프로세스는 같은 CPU 혹은 한 네트워크 내의 CPU들 간에 정보를 주고받을 수 있다.
- 통신은 공유 메모리 (shared memory) 혹은 message passing (메시지 패싱) 을 통해 가능
cf> 공유 메모리 (shared memory) : 여러 개의 프로세스가 메모리의 한 부분을 공유하도록 하는 것
cf> 메시지 패싱 (message passing) : 프로세스 간에 정보 패킷(packets)을 주고받는 것
⑥ Error Detection (에러 탐지)
- 운영체제는 가능한 에러들을 지속적으로 탐지해야 한다.
⑦ Resource Allocation (자원 할당)
- 다수의 사용자 혹은 다수의 job이 동시에 실행될 때, 자원이 공평하게 할당되어야 한다.
⑧ Accounting (회계)
- 어떤 종류의 컴퓨터 자원이 얼마나, 어떤 사용자에게 쓰이는지 추적
⑨ Protection and Security (보호와 보안)
- 동시에 실행되는 프로세스들이 서로 방해가 되서는 안 된다.
Process Management 관련해서 운영체제가 하는 일
- 사용자 프로세스와 시스템 프로세스의 creation과 deletion
- 프로세스의 suspension(보류)와 resumption(재개)
- 프로세스 동기화, 프로세스 통신, 교착 상태 해결(deadlock handling)을 위한 매커니즘의 제공
Memory Management 관련해서 운영체제가 하는 일
- 어떤 부분의 메모리가 현재 누구에게 사용되고 있는지 추적
- 메모리 공간이 비어 있을 때 어떤 프로세스가 메모리에 로드되는지 결정
- 필요한 메모리 공간을 할당하거나 할당 해제
Secondary-storage Management 관련해서 운영체제가 하는 일
- Free-space 관리
- Storage 할당
- Disk scheduling
명령어 인터프리터 (Command Interpreter)
- 명령어 인터프리터는 사용자 또는 명령어 파일로부터 명령어를 읽어들인 후, 명령어를 하나 이상의 시스템 호출로 변환함으로써 그것을 실행한다.
- 그에 따라 명령어 인터프리터는 실행에 제약을 받기 때문에, 커널에 포함되지 않는다.
System Programs
- 유용한 시스템 호출의 bundles로 불린다.
- 사용자가 문제를 해결하기 위해 프로그램을 따로 짤 필요 없이 시스템 프로그램은 사용자에게 basic functionality를 제공한다.
Operating System Structure
MS-DOS
- 사용자 프로그램이 입출력 루틴에 접근해 디스플레이와 디스크 드라이브에 직접 쓰기를 할 수 있었다.
- 사용자 프로그램에 문제가 생기면 전체 시스템에 문제가 생긴다.

UNIX
- MS-DOS에서 더 진화한 구조
- UNIX OS는 분리된 두 부분으로 이루어져 있다. (System programs, the kernel)
- 커널에 너무 많은 일이 치중되어 있어 구현, 유지 보수가 어려운 구조이다. (Monolithic 구조)
- 장점은 마이크로 커널을 확장하기 편리하고, 새로운 아키텍쳐에 운영체제를 이식하기 편리하며, 커널 모드에서 더 적은 양의 코드가 돌아가고, 더 보안에 강하다.

cf> 마이크로커널 (Microkernel) : 커널에서 핵심적인 요소만 남긴 커널이다. 코드 양이 훨씬 적어 컴파일, 테스트 시간이 비교적 짧고, 다른 시스템에 이식(porting)이 가능하다. 다만, 시스템 프로그램을 추가해 기능을 늘리려고 하면 속도가 느려진다.
Modules
- 커널을 확장하기 위한 기술
- 각각의 core 요소는 분리되어 있다.
- 장치 드라이버는 모두 모듈로 구현되어 있다.
- 레이어와 비슷하지만 더 융통성있고 효율적

Virtual Machines
- 각각의 가상 머신들은 다른 가상 머신들과 완벽히 고립되어 있으므로 시스템 자원을 완벽하게 보호할 수 있는 이점이 있다. 그러나 이러한 고립은 자원의 직접적인 공유가 불가능하다.
- 저만의 운영체제를 실행하는 여러 개의 가상 머신들을 게스트 운영 체제라고 하며, 다른 장치가 충돌을 피하기 위해 각 장치에서 실행하기 위한 서버 통합(server consolidation)에서 쓰이며, 각 가상 머신에서는 같은 물리 컴퓨터에서 실행된다.
Process
- 프로그램은 실행 가능한 파일이 메모리로 로드될 때 프로세스가 된다. (one program -> multiple processes)
- code 섹션, data 섹션, stack, heap, program counter 등을 포함한다.
Process State
- new : 프로세스가 만들어질 때
- ready : 프로세스가 CPU에 assign 되길 기다릴 때
- running : Instruction이 실행될 때
- waiting : 실행 중 작업이 완료되어 입출력을 기다릴 때
- terminated : 프로세스가 실행을 끝냈을 때

Process Control Block (PCB)
- 각각의 프로세스는 자신의 정보 묶음인 PCB를 갖고 있다.
- 프로세스 상태, 프로세스 넘버 (ID 같은 것), 프로그램 카운터, 레지스터, 메모리 제한 등
Process Scheduling
- 어떤 프로세스를 프로세서에 할당할 것인지 결정하는 일
- 멀티프로그래밍의 목적은 CPU 활용을 극대화하기 위해서 어떤 프로세스들을 항상 실행시키는 것이고, 시분할의 목적은 프로그램이 실행될 때 사용자들이 그것과 자주 소통할 수 있게 CPU를 프로세스들로 switch하는 것이다.
- Job queue : 시스템 내 모든 프로세스들의 집합
- Ready queue : 실행되기를 ready, waiting 하고 있는 메인 메모리의 프로세스들의 집합
CPU switch
- 프로세스가 실해오디다가 인터럽트가 발생해 운영체제가 개입하여 프로세서에 할당된 프로세스를 바꾸는 것
- 시스템 호출을 사용해야 하는 경우 프로세스가 자체적으로 처리할 수 없기 때문에 운영체제가 개입해야 한다.
- CPU 스위칭을 할 때는 작업 중이던 프로세스의 PCB를 백업한다.
Long-term scheduler
- 레디 큐에 프로세스를 옮긴다.
- CPU 밖에서 작업하고, 가끔 수행된다.
- 느리다.
- 멀티프로그래밍의 정도를 조절한다.
Shrot-term scheduler
- 프로세스를 프로세서에 할당한다.
- CPU 내에서 작업한다. (CPU scheduler로 불린다)
- 빠르다.
Context Switch
- 프로세서가 다른 프로세스로 스위치 할 때 시스템은 작업 중이던 프로세스의 상태를 저장하고 새로운 프로세스의 상태를 로드한다.
- Context란? 시스템에서 활용가능한 모니터링된 정보를 뜻한다.
- 프로세스의 context는 PCB이다. (CPU 레지스터 값, 프로세스 상태, 메모리 관리 정보 등)
- PCB 정보가 바뀌는 것 = Context swtich
- Context-switch 타임은 overhead이므로 너무 자주 일어나면 성능 저하가 일어난다.