| 운영 체제 |
| --- |
|  |
| 
공통 기능 |
| * 프로세스 관리
* 인터럽트
* 메모리 관리
* 파일 시스템
* 장치 드라이버
* 네트워크
* 보안
* 입출력
 |
| * v
* t
* e
 |

**프로세스 관리**는 현대의 운영 체제 가운데 중요한 부분이다. 운영 체제는 자원을 프로세스에 할당하고, 프로세스가 정보를 공유하고 교환할 수 있게 하며, 각 프로세스 자원을 다른 프로세스로부터 보호하며, 프로세스 간 동기화를 가능하게 해야 한다. 이러한 요구를 충족하기 위하여 운영 체제는 각 프로세스를 위한 자료 구조를 관리하며, 이로써 프로세스의 상태와 자원 소유권을 기술하고 운영 체제가 각 프로세스를 제어할 수 있다.

다중 프로그래밍
--------

현대의 수많은 운영 체제에서 하나 이상의 프로그램이 동시에 메모리에 적재된다. 이를테면 한 명 이상의 사용자가 같은 프로그램을 실행할 수도 있으며 여기서 각 사용자는 메모리에 적재된 프로그램의 개별 복사본을 점유한다. 어떠한 프로그램의 경우 메모리에 적재된 복사본 하나만을 생성할 수 있지만 여러 명의 사용자들이 이에 대한 공유 접근을 하여 각 사용자가 동일한 프로그램 코드를 실행할 수 있다. 이러한 프로그램을 재진입성이 있다고 한다. 프로세서는 즉시 한 프로그램으로부터 하나의 명령만을 수행할 수 있지만, 여러 개의 프로세스들은 나머지 프로세스들이 일시적으로 유휴 상태에 있는 동안 각 프로세스를 프로세서에 할당함으로써 한 동안 보유할 수 있다. 한꺼번에가 아닌 한 동안 수행하는 수많은 프로세스들은 동시 실행(concurrent execution, 여러 개의 프로그램을 하나의 컴퓨터에 실행하는 것을 뜻함)이라고 부른다.

다중 프로그래밍 또는 멀티태스킹 운영 체제는 동시에 여러 프로세스를 실행하는 시스템을 말한다. 다중 프로그래밍의 요구 사항은 프로세서가 특정 기간 동안 각 프로세스에 할당되고 적절한 순간에 할당이 해제되는 것이다. 프로세서가 프로세스 실행 도중 할당이 해제되면 가능한 쉽게 나중에라도 다시 시작할 수 있도록 다음과 같은 방식을 수행한다.

1. 프로세스는 시스템 호출을 일으킨다. (소프트웨어 인터럽트라고도 한다) 이를테면 입출력 요청은 하드 디스크의 파일 접근을 요청한다.
2. 하드웨어 인터럽트를 일으킨다. 이를테면 컴퓨터 자판에 키를 누르거나 타이머가 소진된다. (선점 스케줄링에 이용)

프로세스 하나를 멈추고 다른 프로세스를 시작 및 다시 시작하는 것을 문맥 교환이라고 한다. 현대의 수많은 운영 체제에서 프로세스는 수많은 하위 프로세스를 포함할 수 있는데 이를 스레드라고 한다. 스레드는 하부 프로세스라고 생각할 수 있는데, 이는 하나의 프로세스 코드 안에 있는 개별적이고도 독립적인 실행 시퀀스이다. 스레드는 분산 및 클라이언트-서버 시스템 설계에서, 또 다중 프로세서 시스템에서 실행하는 소프트웨어에서 중요성이 커지고 있다.

프로세스 작성
-------

운영 체제는 프로세스를 만들기 위하여 몇 가지 일을 한다. 하나의 응용 프로그램만 실행하는 매우 단순한 시스템(이를테면 전자레인지의 제어부)은 시스템이 구동할 때 필요한 모든 프로세스가 있을 것이다. 그러나 일반 목적의 시스템에서는 동작 중에 필요하면 프로세스를 만들고 끝내야 하는데, 이러한 방법이 몇 가지 있다. 프로세스를 만들게 하는 네 개의 주된 이벤트가 있다.

* 시스템 초기화
* 프로세스를 실행함으로써 프로세스 작성 시스템 호출 실행
* 새로운 프로세스를 만들어달라는 사용자의 요청
* 일괄 처리 시작

운영 체제가 시동될 때 일반적으로 몇 개의 프로세스가 만들어진다. 이 가운데 포그라운드 프로세스는 사용자와 서로 소통하며 사용자를 위해 일을 수행한다. 백그라운드 프로세스는 특정 사용자와 연계하지 않지만 일부 특정한 기능을 수행한다.

프로세스 끝내기
--------

프로세스를 끝내는 데에는 몇 가지 까닭이 있다.

* 일괄 처리의 중단 명령 수행
* 사용자 로그 오프
* 프로세스의 서비스 끝내기 요청 실행
* 오류 및 실패 조건
* 정상적인 완료
* 시간 제한 초과
* 메모리 사용 불가
* 바운드 위반
* 보호 오류 (이를테면 읽기 전용 파일에 쓰기를 할 경우)
* 산술 오류 (이를테면 0으로 나눌 때)
* 시간 실행 초과
* 입출력 실패
* 유효하지 않은 명령
* 특별한 권한이 있는 명령
* 데이터 오용
* 운영 체제 중재
* 부모 프로세스 종료
* 부모 프로세스의 요청

프로세스 서술 및 제어
------------

각 시스템 프로세스는 프로세스 제어 블록(PCB, 리눅스에서는 프로세스 서술자)로 불리는 자료 구조로 표현하며 이 PCB는 여행자의 여권과 같은 역할을 수행한다. PCB는 다음과 같은 기본 정보를 포함하고 있다:

* 프로세스의 위치
* 프로세스의 이동 경로
* 프로세스의 수행 정도
* 프로세스의 저장 위치
* 프로세스의 자원 점유량

**프로세스 동일성**: 각 프로세스는 서술자에 연계된 포인터와 사용자의 동일성을 그대로 고유하게 부여받는다.
**프로세스 상황**: READY, RUNNING, BLOCKED, READY SUSPEND, BLOCKED SUSPEND 가운데 프로세스의 현재 상황을 인지한다. (자세한 정보는 프로세스에 있음)
**프로세스 상태**: 작업의 현재 상태를 알려 주는 모든 정보를 포함한다.
**측정**: 성능 측정과 소요 목적에 주로 쓰이는 정보를 포함한다. 어떠한 종류의 자원이 프로세스가 사용하고 있는지, 또 얼마나 오래 사용하고 있는지를 알려 준다.

출처
--

* Operating System incorporating Windows and UNIX, Colin Ritchie. ISBN 0826464165
* Operating Systems, William Stallings, Prentice Hall, (4th Edition, 2000)
* Multiprogramming, Process Description and Control
* Operating Systems – A Modern Perspective, Gary Nutt, Addison Wesley, (2nd Edition, 2001).
* Process Management Models, Scheduling, UNIX System V Release 4:
* Modern Operating Systems, Andrew Tannenbaum, Prentice Hall, (2nd Edition, 2001).
* Operating System Concepts, Silberschatz, Galvin & Gagne, John Wiley & Sons, (6th Edition, 2003).

| * v
* t
* e
운영체제 |
| --- |
| 일반 | 
* 역사
* 연표
* 목록
* 점유율
* 비교
* 개발

 |
| 커널 | 

|  |  |
| --- | --- |
| 일반 구조 | 
* 모놀리식 커널
* 마이크로커널

 |
| 하부 구조 | 
* 엑소커널
* 나노커널
* 하이브리드

 |
| 구성 요소 | 
* 사용자/커널 공간
* 서버
* 적재 가능 커널 모듈
* 장치 드라이버

 |

 |
| 프로세스 관리 | 

|  |  |
| --- | --- |
| 개념 | 
* 프로세스
* 프로세스 제어 블록
* 인터럽트
* 스레드
* 문맥 교환
* 스케줄링

 |
| CPU 모드 | 
* 보호 모드
* 수퍼바이저 모드

 |
| 스케줄링 알고리즘 | 
* 공동 다중작업/시분할
* 선점
* 라운드 로빈
* 고전 우선순위 스케줄링
* 멀티레벨 피드백 큐
* 최단 작업 우선

 |

 |
| 메모리 관리 | 
* 메모리 보호
* 메모리 세그먼트
* 페이징
* 세그멘테이션 오류
* 일반 보호 실패
* 버스 오류

 |
| 예 | 
* 아미가OS
* BeOS
* BSD
* 도스
* GNU
* 리눅스
* 크롬 OS
* 맥 OS
* 모르프OS
* OS/2
* ReactOS
* 솔라리스
* 유닉스
* 윈도우
* 더 보기

 |
| 기타 개념 | 
* 부트 로더
* 라이브 CD
* 라이브 USB
* PXE
* API
* 가상 파일 시스템
* 가상 테이프 라이브러리
* CLI
* TUI
* GUI
* VUI
* HAL

 |