OS - 1. 운영체제 Overview
(운영체제 카테고리의 글은 Abraham Silberschatz의 'Operating System Concepts'를 기반으로 작성합니다.)
컴퓨터 시스템은 HardWare, OS, Application Program, User로 구성되어 있다. (+Network)
1) 운영체제의 역할
OS는 하드웨어를 관리, 사용자를 매개하는 프로그램
커널과 커널모듈로 구성
User 관점에서,
사용자가 자원 사용(Resource Utilization)을 신경쓰지 않게, 컴퓨터를 쉽게 이용하도록 함.
System 관점에서,
OS는 자원할당자(Resource Allocator) 로서 자원을 관리하는 제어 프로그램이다.
2) 컴퓨터 시스템
일반적은 컴퓨터 시스템은 하나 혹은 여러개의 CPU와 장치 컨트롤러로 구성,
이들은 공통 버스로 이어져 메모리를 공유함
컴퓨터를 켜면 Bootstrap Program(초기화 프로그램)이 실행된다.
* bootstrap program은 ROM이나 EEPROM에 저장된 펌웨어
Bootstrap Program은 시스템을 초기화하고 Boot loader를 실행한다.
* boot loader는 kernel 위치를 알아내고, 메모리에 load 함
입출력 장치와 CPU는 동시에 실행된다. 장치 컨트롤러는 CPU에게 이벤트 발생을 알리는데, 이를 '인터럽트' 라고 한다.
인터럽트는 (외부적으로) HW나 SW에 의해 발생할 수 있으며, (내부적으로) SW에 의해 발생될 수 있다.
후자를 trap 혹은 exception 이라고 한다.
CPU가 ① 인터럽트를 받으면, ② 하던 일을 멈추고 ③ 특정 위치를 찾는다. 이 위치는 '인터럽트 벡터' 에 저장되어 있다.
④ '서비스 루틴' 으로 인터럽트를 처리하면, ⑤ CPU는 원래 작업으로 돌아온다.
대부분 OS는 'Intertupt Driven' 이다. 즉, 인터럽트가 발생할 때까지 CPU는 대기상태에 머문다.
반면 'Polling' 방식의 경우, 주기적으로 이벤트를 감시해 루틴을 실행한다.
3. Storage 구조
Kernel은 Executor를 통해 기억장치에서 exe 파일을 가져오고, 이것을 메모리에 할당해 실행시킨다.
메인메모리(RAM)은 작고 비싸며, volatile (휘발성) 장치이므로, 보조기억장치인 HDD, SSD 와 같은 non-volatile 장치를 추가로 사용해야 한다. volatile 장치인 cache, register 등도 사용한다.
4. DMA(Direct Memory Access)
DMA는 장치와 메모리를 직접 연결하는 방식으로, 버스가 지원하는 기능이다.
데이터는 DMA 컨트롤러에 의해 메모리에 전달되며, CPU는 데이터 이동이 완료되었다는 인터럽트만 한 번 일어난다.
결과적으로, CPU가 하는 일이 줄어들어 성능이 개선된다.
5. 컴퓨터 시스템 Architecture
① Single Processor System (하나의 CPU만 탑재)
② Multi Processor System 은 두 개 이상의 CPU가 탑재되며, 몇 가지 장점을 지닌다.
처리량(throughput)이 증가하고, 경제적이며, 신뢰성(reliability)이 증가한다.
Multi Processor System 은 비대칭 멀티프로세싱 시스템과 대칭 멀티프로세싱 시스템으로 나뉜다.
6. 클러스터 시스템, Clusterd System
멀티프로세서 시스템의 일종으로, 여러 시스템들이 하나로 모여있는 구조이다.
비대칭 클러스터링과 대칭 클러스터링으로 나뉜다.
비대칭 클러스터링에서 하나의 장비는 상시 대기 모드로 작동하며, 별도의 작업을 수행하지 않는다.
대칭 클러스터링은 두 개 이상의 노드가 작업을 수행하는 구조이다.
7. OS 구조
'멀티 프로그래밍' 은 여러 프로그램을 메모리에 로드해두고 한 프로세스가 대기 상태가 되면 다른 프로세스의 작업을 수행하는 시스템이다.
여기서 다 확장된 시스템이 '시분할 시스템' 혹은 '멀티태스킹' 이다. 이는 프로세스마다 작업 시간을 정해두고 번갈아가면서 작업하는 방식이다. (프로세스들이 번갈아가며 메모리를 사용하면, 사용자 입장에서 동시에 작동하는 것처럼 보인다)
이 때 OS는 어떤 작업을 먼저 처리할지 정해야하는데, 이러한 과정을 '스케줄링' 이라고 한다.
8. Dual Mode
운영체제는 시스템 보호를 위해 '유저 모드'와 '커널 모드'를 나누는데, HW의 'mode bit' 가 0이면 커널모드, 1이면 유저모드이다. Privileged 명령어는 커널 모드일 때만 실행가능하며, 유저모드에서 해당 기능을 호출하려면 SystemCall 이라는 인터페이스를 통해야한다.
9. Process 관리
Single-Thread 프로세스는 하나의 프로그램 카운터를 가지고 있으며, Multi-Thread 프로세스는 여러 개의 프로그램 카운터를 가지고 있다. '프로그램 카운터 (PC)' 는 해당 프로그램이 어디까지 실행되었는지 북마크하는 역할을 한다.
10. Computing Environments
Traditional Computing, Mobile Computing, Distributed Computing, Client-Server Computing, P2P Computing, Virtualization, Cloud Computing, RealTime Embedded System 등의 다양한 컴퓨팅 환경들이 있다.
11. OS의 Services
운영체제는 사용자와 시스템에게 다음과 같은 다양한 서비스, 환경을 제공한다.
(사용자에게)
① UI (User Interface) :
UI는 사용자와 컴퓨터 시스템이 만나는 지점이다.
인터페이스는 CLI와 Batch Interface, GUI로 나눌 수 있다.
② 프로그램 실행 :
시스템은 프로그램을 메모리에 로드하고, 이를 실행할 수 있어야한다.
③ 입출력 명령 :
만약 프로그램이 입출력 명령을 필요로 한다면, 운영체제는 입출력 명령을 수행해야 한다.
④ 파일 시스템 조작 :
파일을 읽고, 쓰고, 만들고, 지울 수 있어야 한다.
⑤ 통신 :
어떤 프로세스가 다른 프로세스와 정보를 교환해야 하는 상황에서 운영체제는 '공유 메모리'나 '메시지 패싱' 방법을 사용한다.
⑥ 에러 탐지 :
CPU나 메모리와 같은 HW, 입출력 장치, 사용자 프로그램 등에서 일어나는 에러를 탐지하고, 바로 잡아야한다.
(시스템에게)
① 자원 할당 :
여러 사용자나 여러 작업을 동시에 처리해야 한다면, 컴퓨팅 자원은 각각 잘 배분되어야 한다. 이러한 상황에서 운영체제는 다양한 종류의 자원을 관리한다. ex) CPU cycles, main memory, file storage, I/O devices
② 로깅 (Logging) :
시스템은 어떤 유저가 어떤 종류의 자원을 얼마나 사용하고 있는지 계속 "추적"해야한다.
③ 보호와 보안
12. 시스템콜 (System Calls)
시스템콜은 커널과 사용자 프로그램을 이어주는 인터페이스 역할을 한다.
시스템콜은 크게 6가지로 분류할 수 있다.
① 프로세스 제어 : end, abort, load, execute
② 파일 관리 : create, delete, open, close, read, write
③ 장치 관리 : read, write, request, release
④ 정보 유지 : get/set time or date
⑤ 통신 : send/receive messages, transfer status
⑥ 보호