1. 운영체제(Operating System)
1-1. 정의
- 대표적인 시스템 소프트웨어
- 컴퓨터 시스템의 자원을 관리하고 컴퓨터 프로그램이 동작하기 위한 서비스를 제공하는 프로그램들의 모음
1-2. 역할
1-2-1. 컴퓨터 시스템의 자원 관리
- 자원
- 하드웨어 자원 : CPU, 메모리, 키보드, 마우스, 네트워크 카드 등
- 소프트웨어 자원 : 웹 브라우저, 워드프로세서, 게임 등)
- 데이터
- 컴퓨터 시스템을 효율적으로 운영하기 위함
1-2-2. 사용자 지원
- 사용자가 내린 명령을 해석하여 실행하게 함
- 사용자와 하드웨어 사이의 매개체 역할
- 사용자에게 편의성을 제공하기 위함
2. 시분할 시스템(Time-sharing systems)
- 여러 사용자나 프로세스가 CPU, 메모리, 주변 장치와 같은 동일한 시스템 리소스를 동시에 공유할 수 있도록 하는 것
- 중앙처리장치(CPU)의 처리 시간을 아주 짧게 세분화하여 각 사용자의 프로그램에 할당하여 순서대로 복수의 처리를 실행
- 사용자는 마치 컴퓨터를 독점하고 있는 것과 같은 착각이 듦
- 오늘날 대부분의 시스템이 적용하고 있는 방식
3. 다중 프로그래밍 시스템(multi-programming system)
3-1. 정의
- 여러 개의 프로세스가 메모리에 동시에 적재되는 것
- 현재 실행 중인 프로세스가 입출력 대기를 해야 하면 실행을 기다리고 있는 다른 프로세스에 CPU를 할당 할 수 있음
- CPU 연산과 입출력 작업을 동시에 수행 → CPU 이용도 및 시스템 처리량 향상
3-2. 메모리 분할
3-2-1. 고정 분할
메모리를 여러 개의 고정된 크기의 영역으로 분할하는 방식
3-2-1-1. 프로세스 배치 방법
- 절대번역 및 적재
- 각 분할영역마다 큐를 두고 큐에 들어온 프로세스는 해당 영역에만 적재되도록 하는 것
- 프로그램 컴파일 시 프로그램 내의 주소를 절대주소로 번역하여 해당되는 특정 분할영역에만 적재
- 장점 : 구현 용이
- 단점 : 빈 분할이 있어도 다른 큐의 프로세스를 적재할 수 없어 효율성 낮음
- 재배치 가능 번역 및 적재
- 메모리 전체에 하나의 큐만 두고 모든 프로세스를 하나의 작업 큐에 넣어서 어느 분할에서든지 실행 가능하게 하는 것
- 프로그램 컴파일 시 프로그램 내의 주소를 상대주소로 번역하여 어디든 적재가 가능
- 장점 : 절대번역 및 적재보다 기억장치의 낭비를 줄일 수 있음
- 단점 : 절대번역 및 적재보다 복잡함
3-2-1-2. 내부 단편화(fragmentation)
- 고정 분할 방식에서 프로세스의 크기가 적재된 분할영역의 크기보다 작아 분할영역 내에 남게 되는(낭비되는) 메모리가 존재하는 것
- 수행할 프로세스의 크기를 미리 알고 그에 맞춰 고정 분할을 하면 해결 가능하나 쉽지 않음
3-2-2. 동적 분할
메모리의 분할경계가 고정되지 않고 각 프로세스에 필요한 만큼의 메모리만 할당하는 방식
3-2-2-1. 외부 단편화
- 메모리의 할당과 반환이 계속 반복됨에 따라 작은 크기의 공백이 메모리 공간에 흩어져 생기는 것
- 공백보다 큰 프로세스가 메모리 할당을 요청하는 경우 대기해야 함
3-2-2-2. 통합과 집약
- 외부 단편화 해결 방법
- 통합(coalescing)
- 인접된 공백을 더 큰 하나의 공백으로 만드는 과정
- 과정
- 하나의 프로세스가 종료됨
- 종료된 프로세스가 차지하고 있는 메모리 영역이 다른 비어 있는 메모리와 인접하는지 조사
- 두 영역이 인접할 경우, 빈 공간 리스트에 새로운 공백이나 기존의 공백과 합쳐 하나의 공백으로 만듦
- 하나의 프로세스가 일정 크기의 큰 메모리 영역이 필요할 때, 제일 큰 공백 하나로는 그 프로세스를 수행할 수 없음
- 집약(compaction)
- 메모리 내의 모든 공백을 하나로 모으는 작업
- 여러 개의 작은 공백을 하나의 커다란 저장공간으로 만듦
- 이용 가능한 기억장소가 연속으로 모이므로, 통합에서 발생했던 문제 해결
3-3. 메모리 보호
- 프로세스가 다른 할당영역을 침범하지 않게 함
- 프로세스가 사용할 수 있는 주소 범위를 하한-상한 레지스터 쌍 또는 하한-크기 레지스터 쌍의 값으로 제한
- 프로세스가 제한을 넘어 운영체제를 호출하려면 시스템 호출을 통해서만 가능
4. 대화형 시스템(interactive system)
- 프로그램이 진행되는 도중에 사용자로부터 데이터를 입력받아 프로그램 진행에 반영할 수 있는 운영체제 방식
- 입출력이 중요한 프로그램에 사용됨 ex. DB 접근 프로그램, 동영상 플레이어 등
- 현재 대부분의 운영체제는 대화형 운영체제임
5. 다중 처리기 시스템(multi-processor system)
5-1. 개념
- 2개 이상의 하드웨어 처리기로 구성되어 각 처리기들이 기억 장치를 공유하거나 직접 한 처리기에서 다른 처리기로 메시지를 보냄으로써 통신이 이루어지는 시스템
- 한 개의 운영 체제(OS)에 의해 통제됨
5-2. 구조적 모델
- 밀결합형 방식 : 주기억 장치를 통해 자료를 교환하는 방식
- 소결합형 방식 : 각 처리기마다 입출력 장치와 지국 기억 장치를 갖는 방식
5-3. 종류
5-3-1. 대칭 멀티프로세서
- 각 프로세서는 유사한 운영 체제 복사본을 포함하며 모두 서로 통신함
- 프로세서들 사이에 마스터-슬레이브 관계가 존재하지 않음(peer-to-peer)
5-3-2. 비대칭 멀티프로세서
- 각 프로세서에 미리 정의된 작업이 제공
- 마스터-슬레이브 관계 포함
→ 다른 모든 프로세서에 명령을 제공하는 마스터 프로세서 존재
- 대칭 멀티프로세서가 만들어지기 전에 사용할 수 있는 유일한 유형의 멀티프로세서
5-4. 장점
- 신뢰성 향상 : 하나의 프로세서가 실패하더라도 나머지 프로세서가 작업을 계속 실행할 수 있으므로 계속 작동할 수 있음
- 향상된 성능 : 작업 부하를 여러 프로세서에 분산할 수 있으므로 단일 프로세서 시스템보다 더 빠르게 작업을 실행할 수 있음
- 비용 절감 : 데이터 저장소, 주변 장치, 전원 공급 장치 등을 공유하기 때문에 장기적으로 단일 프로세서 시스템보다 저렴함
- 향상된 병렬 처리 : 서로 다른 프로세서가 서로 다른 작업을 동시에 실행할 수 있으므로 더 큰 병렬 처리 가능
5-5. 단점
- 더 높은 전력 소비: 단일 프로세서 시스템보다 작동하는 데 더 많은 전력이 필요하므로 시스템 운영 및 유지 관리 비용이 증가할 수 있음
- 복잡성 증가 : 단일 프로세서 시스템보다 더 복잡하며 추가 하드웨어, 소프트웨어 및 관리 리소스 필요
- 대용량 메인 메모리 필요 : 멀티프로세서 시스템의 모든 프로세서는 메모리를 공유하기 때문에 단일 프로세서 시스템에 비해 훨씬 더 큰 메모리 풀 필요
- 동기화 문제 : 작업을 정확하고 효율적으로 실행하기 위해 프로세서 간의 동기화가 필요하며, 이로 인해 시스템에 복잡성과 오버헤드가 추가될 수 있음
- 제한된 성능 향상: 모든 응용 프로그램이 멀티프로세서 시스템의 이점을 누릴 수 있는 것은 아니며, 일부 응용 프로그램은 멀티프로세서 시스템에서 실행할 때만 제한된 성능 향상을 볼 수 있음
6. 시스템 콜(System Call)
- 운영체제에 서비스를 요청하는 메커니즘
- 응용 프로그램이 하드웨어에 대한 제어가 필요한 경우
- 과정
- 사용자 모드 : 응용 프로그램의 시스템 호출
- 모드 변경 : 사용자 모드 → 커널 모드
- 커널 모드 : 운영체제의 커널 동작, 하드웨어 제어
7. 커널(Kernel)
7-1. 정의
- 커널 모드에서 동작하는 운영체제의 핵심요소
- 응용 프로그램과 하드웨어 수준의 처리 사이의 가교 역할
7-2. 구성방식
7-2-1. 일체형 커널(모놀리식 커널, Monolithic Kernel)
- 운영체제의 모든 서비스가 커널 내에 포함
- 장점 : 커널 내부 요소들이 서로 효율적으로 상호작용 할 수 있음
- 단점 : 하나의 요소라도 오류가 발생하면 시스템 전체에 장애를 일으킬 수 있음
- Unix, Linux
7-2-2. 마이크로 커널(Micro Kernel)
- 운영체제 요소의 대부분을 커널 외부로 분리
- 커널 내부에는 메모리 관리, 프로세스 간 통신(InterProcess Communication: IPC), 멀티태스킹 등 최소한의 요소만 남겨 놓음
- 장점 : 유지보수 용이, 안정성 우수
- 새로운 서비스를 추가하여 운영체제를 확장하기 쉬움
- 커널 외부의 요소에 문제가 발생해도 커널 자체에는 영향이 없음
- 단점 : 성능 저하 발생
- 커널 외부의 운영체제 요소들 사이에 데이터 전달이 필요한 경우 프로세스 간 통신이 필요함
8. 커널 모드와 사용자 모드
8-1. 커널 모드(Kernel mode) = 슈퍼바이저 모드
- 하드웨어를 직접 제어할 수 있는 CPU의 명령어를 사용할 수 있는 모드
- 운영체제의 커널이 동작함
8-2. 사용자 모드(User mode) = 보호 모드
- 하드웨어를 직접 제어할 수 있는 CPU의 명령어를 사용할 수 없는 모드
- 응용 프로그램이 동작함
8-3. 분리된 이유
- 응용 프로그램이 하드웨어를 직접 제어할 수 있는 방법이 존재한다면 시스템의 안정성을 보장할 수 없음
- 커널 모드에서는 운영체제만, 사용자 모드에서는 응용 프로그램만 동작하도록 함으로써 응용 프로그램이 하드웨어에 직접 접근하는 것을 막아 시스템의 안정성을 보장
9. 폴링(Polling)
- CPU가 입출력장치의 상태를 지속적으로 확인하여 CPU가 원하는 상태가 될 때까지 기다리는 것
- 연결된 입출력장치의 개수가 증가할수록 CPU를 점유하는 시간이 증가하여 성능 하락
10. 인터럽트(Interrupt)
10-1. 정의
프로그램을 실행 중에 예기치 않은 상황이 발생할 경우 현재 실행중인 작업을 중단하고 발생된 상황을 처리한 후 다시 실행중인 작업으로 복귀하는 작업
10-2. 처리과정
- 인터럽트 제어기에 입출력장치가 가용상태가 되었다는 신호를 보냄
- 인터럽트 제어기가 CPU에 인터럽트 신호를 보냄
- CPU는 현재 실행 중이던 명령만 마치고 즉시 인터럽트에 응답함
- 인터럽트 제어기가 이벤트 대상에 대한 정보를 CPU에 보내줌
- CPU는 현재 상태를 보관하고 필요한 입출력 처리를 함
- 원래 프로세스 실행상태로 복귀함
11. DMA(Direct Memory Access)
11-1. 정의
DMA 제어기를 이용하여 CPU를 통하지 않고 메모리에 직접 접근하여 데이터를 전송하는 방법
11-2. 처리 과정
- CPU가 입출력에 필요한 정보(소스의 위치와 양, 목적지에 대한 정보)를 DMA 제어기에 넘김. 이 때 소스와 목적지 중 하나는 메모리가 됨
- DMA 제어기가 소스에서 목적지로 데이터를 보내도록 장치제어기에 요청함. CPU가 처음에 지시한 양이 될 때까지 반복함
- 원하는 양의 입출력이 끝나면 DMA 제어기는 인터럽트 제어기에 신호를 보냄
- 인터럽트 제어기가 인터럽트를 발생시켜 CPU에 입출력 작업이 모두 끝났음을 알림
11-3. 특징
- 한 번에 입출력량이 많은 경우 인터럽트 발생 횟수를 단 한 번으로 줄여주어 CPU의 효율 향상
- 사이클 스틸링을 통해 입출력장치 효율 향상
💡 사이클 스틸링(Cycle Stealing)
CPU와 DMA 제어기가 동시에 메모리에 액세스를 시도할 때 충돌을 방지하기 위해 DMA 제어기에 우선권을 주는 것
12. 동기식 I/O와 비동기식 I/O
12-1. 동기식(Synchronous) I/O
- I/O을 시작하는 일부 실행 수단(ex. 프로세스, 스레드)이 I/O가 완료될 때까지 기다리는 방식
- CPU가 I/O 연산이 끝날 때까지 인터럽트를 기다리게 됨(자원 낭비)
- I/O 완료 시 동일한 실행 수단이 I/O 결과를 사용하여 다른 작업을 계속함
- I/O의 동기화를 위해 장치별로 Queue를 두어 요청한 순서대로 처리
- 처리 방식
- 사용자가 입출력 요청을 함
- OS Kernel로 CPU의 제어권이 넘어와서 입출력 처리와 관련된 커널의 코드가 수행되며, 입출력을 호출한 프로세스의 상태를 봉쇄 상태로 바꾸어 입출력이 완료될 때까지 CPU를 할당받지 못하도록 함
- 입출력이 완료되면 I/O 컨트롤러가 CPU에게 인터럽트를 발생시켜 입출력이 완료되었음을 알려줌
- 프로세스의 봉쇄 상태를 해제시켜 CPU를 할당받을 수 있는 권한이 다시 생기게 됨
12-2. 비동기식(Asynchronous) I/O
- I/O연산을 요청한 후에 연산이 끝나기를 기다리지 않고 CPU의 제어권을 I/O연산을 호출한 프로그램에게 곧바로 다시 부여하는 방식
- I/O 요청이 디스크에서 읽어오는 요청이 아니라 디스크에 쓰는 요청이라면 쓰기 작업이 완료되기 전에도 다음 명령을 수행할 수 있으므로 비동기식 입출력이 사용될 수 있음
- 처리 방식
- CPU의 제어권이 입출력을 요청한 프로세스에게 곧바로 다시 주어짐. 입출력 연산이 완료되는 것과 무관하게 처리 가능한 작업부터 처리함
- 입출력 연산이 완료되면 인터럽트를 통해 CPU에게 알려줌. 이 시점부터 읽어온 데이터를 필요로 하는 명령을 수행할 수 있게 됨