프로세스 관리
| 운영 체제 |
|---|
오류: 그림이 잘못되었거나 존재하지 않습니다. |
| 공통 기능 |
프로세스 관리는 현대의 운영 체제 가운데 중요한 부분이다. 운영 체제는 자원을 프로세스에 할당하고, 프로세스가 정보를 공유하고 교환할 수 있게 하며, 각 프로세스 자원을 다른 프로세스로부터 보호하며, 프로세스 간 동기화를 가능하게 해야 한다. 이러한 요구를 충족하기 위하여 운영 체제는 각 프로세스를 위한 자료 구조를 관리하며, 이로써 프로세스의 상태와 자원 소유권을 기술하고 운영 체제가 각 프로세스를 제어할 수 있다.
다중 프로그래밍
현대의 수많은 운영 체제에서 하나 이상의 프로그램이 동시에 메모리에 적재된다. 이를테면 한 명 이상의 사용자가 같은 프로그램을 실행할 수도 있으며 여기서 각 사용자는 메모리에 적재된 프로그램의 개별 복사본을 점유한다. 어떠한 프로그램의 경우 메모리에 적재된 복사본 하나만을 생성할 수 있지만 여러 명의 사용자들이 이에 대한 공유 접근을 하여 각 사용자가 동일한 프로그램 코드를 실행할 수 있다. 이러한 프로그램을 재진입성이 있다고 한다. 프로세서는 즉시 한 프로그램으로부터 하나의 명령만을 수행할 수 있지만, 여러 개의 프로세스들은 나머지 프로세스들이 일시적으로 유휴 상태에 있는 동안 각 프로세스를 프로세서에 할당함으로써 한 동안 보유할 수 있다. 한꺼번에가 아닌 한 동안 수행하는 수많은 프로세스들은 동시 실행(concurrent execution, 여러 개의 프로그램을 하나의 컴퓨터에 실행하는 것을 뜻함)이라고 부른다.[1]
다중 프로그래밍 또는 멀티태스킹 운영 체제는 동시에 여러 프로세스를 실행하는 시스템을 말한다. 다중 프로그래밍의 요구 사항은 프로세서가 특정 기간 동안 각 프로세스에 할당되고 적절한 순간에 할당이 해제되는 것이다. 프로세서가 프로세스 실행 도중 할당이 해제되면 가능한 쉽게 나중에라도 다시 시작할 수 있도록 다음과 같은 방식을 수행한다.
- 프로세스는 시스템 호출을 일으킨다. (소프트웨어 인터럽트라고도 한다) 이를테면 입출력 요청은 하드 디스크의 파일 접근을 요청한다.
- 하드웨어 인터럽트를 일으킨다. 이를테면 컴퓨터 자판에 키를 누르거나 타이머가 소진된다. (선점 스케줄링에 이용)
프로세스 하나를 멈추고 다른 프로세스를 시작 및 다시 시작하는 것을 문맥 교환이라고 한다. 현대의 수많은 운영 체제에서 프로세스는 수많은 하위 프로세스를 포함할 수 있는데 이를 스레드라고 한다. 스레드는 하부 프로세스라고 생각할 수 있는데, 이는 하나의 프로세스 코드 안에 있는 개별적이고도 독립적인 실행 시퀀스이다. 스레드는 분산 및 클라이언트-서버 시스템 설계에서, 또 다중 프로세서 시스템에서 실행하는 소프트웨어에서 중요성이 커지고 있다.
프로세스 작성
운영 체제는 프로세스를 만들기 위하여 몇 가지 일을 한다. 하나의 응용 프로그램만 실행하는 매우 단순한 시스템(이를테면 전자레인지의 제어부)은 시스템이 구동할 때 필요한 모든 프로세스가 있을 것이다. 그러나 일반 목적의 시스템에서는 동작 중에 필요하면 프로세스를 만들고 끝내야 하는데, 이러한 방법이 몇 가지 있다. 프로세스를 만들게 하는 네 개의 주된 이벤트가 있다.
- 시스템 초기화
- 프로세스를 실행함으로써 프로세스 작성 시스템 호출 실행
- 새로운 프로세스를 만들어달라는 사용자의 요청
- 일괄 처리 시작
운영 체제가 시동될 때 일반적으로 몇 개의 프로세스가 만들어진다. 이 가운데 포그라운드 프로세스[1]는 사용자와 서로 소통하며 사용자를 위해 일을 수행한다. 백그라운드 프로세스는 특정 사용자와 연계하지 않지만 일부 특정한 기능을 수행한다.
프로세스 끝내기
프로세스를 끝내는 데에는 몇 가지 까닭이 있다.
- 일괄 처리의 중단 명령 수행
- 사용자 로그 오프
- 프로세스의 서비스 끝내기 요청 실행
- 오류 및 실패 조건
- 정상적인 완료
- 시간 제한 초과
- 메모리 사용 불가
- 바운드 위반
- 보호 오류 (이를테면 읽기 전용 파일에 쓰기를 할 경우)
- 산술 오류 (이를테면 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).
모듈:Authority_control 159번째 줄에서 Lua 오류: attempt to index field 'wikibase' (a nil value).
- 잘못된 파일 링크가 포함된 문서
- 스크립트 오류가 있는 문서
- 위키데이터 속성 P18을 사용하는 문서
- 위키데이터 속성 P41을 사용하는 문서
- 위키데이터 속성 P94를 사용하는 문서
- 위키데이터 속성 P117을 사용하는 문서
- 위키데이터 속성 P154를 사용하는 문서
- 위키데이터 속성 P213을 사용하는 문서
- 위키데이터 속성 P227을 사용하는 문서
- 위키데이터 속성 P242를 사용하는 문서
- 위키데이터 속성 P244를 사용하는 문서
- 위키데이터 속성 P245를 사용하는 문서
- 위키데이터 속성 P268을 사용하는 문서
- 위키데이터 속성 P269를 사용하는 문서
- 위키데이터 속성 P271을 사용하는 문서
- 위키데이터 속성 P347을 사용하는 문서
- 위키데이터 속성 P349를 사용하는 문서
- 위키데이터 속성 P350을 사용하는 문서
- 위키데이터 속성 P373을 사용하는 문서
- 위키데이터 속성 P380을 사용하는 문서
- 위키데이터 속성 P396을 사용하는 문서
- 위키데이터 속성 P409를 사용하는 문서
- 위키데이터 속성 P428을 사용하는 문서
- 위키데이터 속성 P434를 사용하는 문서
- 위키데이터 속성 P435를 사용하는 문서
- 위키데이터 속성 P436을 사용하는 문서
- 위키데이터 속성 P454를 사용하는 문서
- 위키데이터 속성 P496을 사용하는 문서
- 위키데이터 속성 P549를 사용하는 문서
- 위키데이터 속성 P650을 사용하는 문서
- 위키데이터 속성 P651을 사용하는 문서
- 위키데이터 속성 P691을 사용하는 문서
- 위키데이터 속성 P716을 사용하는 문서
- 위키데이터 속성 P781을 사용하는 문서
- 위키데이터 속성 P791을 사용하는 문서
- 위키데이터 속성 P864를 사용하는 문서
- 위키데이터 속성 P865를 사용하는 문서
- 위키데이터 속성 P886을 사용하는 문서
- 위키데이터 속성 P902를 사용하는 문서
- 위키데이터 속성 P906을 사용하는 문서
- 위키데이터 속성 P947을 사용하는 문서
- 위키데이터 속성 P950을 사용하는 문서
- 위키데이터 속성 P966을 사용하는 문서
- 위키데이터 속성 P982를 사용하는 문서
- 위키데이터 속성 P1003을 사용하는 문서
- 위키데이터 속성 P1004를 사용하는 문서
- 위키데이터 속성 P1005를 사용하는 문서
- 위키데이터 속성 P1006을 사용하는 문서
- 위키데이터 속성 P1015를 사용하는 문서
- 위키데이터 속성 P1045를 사용하는 문서
- 위키데이터 속성 P1048을 사용하는 문서
- 위키데이터 속성 P1053을 사용하는 문서
- 위키데이터 속성 P1146을 사용하는 문서
- 위키데이터 속성 P1153을 사용하는 문서
- 위키데이터 속성 P1157을 사용하는 문서
- 위키데이터 속성 P1186을 사용하는 문서
- 위키데이터 속성 P1225를 사용하는 문서
- 위키데이터 속성 P1248을 사용하는 문서
- 위키데이터 속성 P1273을 사용하는 문서
- 위키데이터 속성 P1315를 사용하는 문서
- 위키데이터 속성 P1323을 사용하는 문서
- 위키데이터 속성 P1330을 사용하는 문서
- 위키데이터 속성 P1362를 사용하는 문서
- 위키데이터 속성 P1368을 사용하는 문서
- 위키데이터 속성 P1375를 사용하는 문서
- 위키데이터 속성 P1407을 사용하는 문서
- 위키데이터 속성 P1556을 사용하는 문서
- 위키데이터 속성 P1584를 사용하는 문서
- 위키데이터 속성 P1695를 사용하는 문서
- 위키데이터 속성 P1707을 사용하는 문서
- 위키데이터 속성 P1736을 사용하는 문서
- 위키데이터 속성 P1886을 사용하는 문서
- 위키데이터 속성 P1890을 사용하는 문서
- 위키데이터 속성 P1907을 사용하는 문서
- 위키데이터 속성 P1908을 사용하는 문서
- 위키데이터 속성 P1960을 사용하는 문서
- 위키데이터 속성 P1986을 사용하는 문서
- 위키데이터 속성 P2041을 사용하는 문서
- 위키데이터 속성 P2163을 사용하는 문서
- 위키데이터 속성 P2174를 사용하는 문서
- 위키데이터 속성 P2268을 사용하는 문서
- 위키데이터 속성 P2349를 사용하는 문서
- 위키데이터 속성 P2418을 사용하는 문서
- 위키데이터 속성 P2456을 사용하는 문서
- 위키데이터 속성 P2484를 사용하는 문서
- 위키데이터 속성 P2558을 사용하는 문서
- 위키데이터 속성 P2750을 사용하는 문서
- 위키데이터 속성 P2980을 사용하는 문서
- 위키데이터 속성 P3223을 사용하는 문서
- 위키데이터 속성 P3233을 사용하는 문서
- 위키데이터 속성 P3348을 사용하는 문서
- 위키데이터 속성 P3372를 사용하는 문서
- 위키데이터 속성 P3407을 사용하는 문서
- 위키데이터 속성 P3430을 사용하는 문서
- 위키데이터 속성 P3544를 사용하는 문서
- 위키데이터 속성 P3562를 사용하는 문서
- 위키데이터 속성 P3563을 사용하는 문서
- 위키데이터 속성 P3601을 사용하는 문서
- 위키데이터 속성 P3723을 사용하는 문서
- 위키데이터 속성 P3788을 사용하는 문서
- 위키데이터 속성 P3829를 사용하는 문서
- 위키데이터 속성 P3863을 사용하는 문서
- 위키데이터 속성 P3920을 사용하는 문서
- 위키데이터 속성 P3993을 사용하는 문서
- 위키데이터 속성 P4038을 사용하는 문서
- 위키데이터 속성 P4055를 사용하는 문서
- 위키데이터 속성 P4114를 사용하는 문서
- 위키데이터 속성 P4143을 사용하는 문서
- 위키데이터 속성 P4186을 사용하는 문서
- 위키데이터 속성 P4423을 사용하는 문서
- 위키데이터 속성 P4457을 사용하는 문서
- 위키데이터 속성 P4534를 사용하는 문서
- 위키데이터 속성 P4535를 사용하는 문서
- 위키데이터 속성 P4581을 사용하는 문서
- 위키데이터 속성 P4613을 사용하는 문서
- 위키데이터 속성 P4955를 사용하는 문서
- 위키데이터 속성 P5034를 사용하는 문서
- 위키데이터 속성 P5226을 사용하는 문서
- 위키데이터 속성 P5288을 사용하는 문서
- 위키데이터 속성 P5302를 사용하는 문서
- 위키데이터 속성 P5321을 사용하는 문서
- 위키데이터 속성 P5368을 사용하는 문서
- 위키데이터 속성 P5504를 사용하는 문서
- 위키데이터 속성 P5587을 사용하는 문서
- 위키데이터 속성 P5736을 사용하는 문서
- 위키데이터 속성 P5818을 사용하는 문서
- 위키데이터 속성 P6213을 사용하는 문서
- 위키데이터 속성 P6734를 사용하는 문서
- 위키데이터 속성 P6792를 사용하는 문서
- 위키데이터 속성 P6804를 사용하는 문서
- 위키데이터 속성 P6829를 사용하는 문서
- 위키데이터 속성 P7293을 사용하는 문서
- 위키데이터 속성 P7303을 사용하는 문서
- 위키데이터 속성 P7314를 사용하는 문서
- 위키데이터 속성 P7902를 사용하는 문서
- 위키데이터 속성 P8034를 사용하는 문서
- 위키데이터 속성 P8189를 사용하는 문서
- 위키데이터 속성 P8381을 사용하는 문서
- 위키데이터 속성 P8671을 사용하는 문서
- 위키데이터 속성 P8980을 사용하는 문서
- 위키데이터 속성 P9070을 사용하는 문서
- 위키데이터 속성 P9692를 사용하는 문서
- 위키데이터 속성 P9725를 사용하는 문서
- 위키데이터 속성 P9984를 사용하는 문서
- 위키데이터 속성 P10020을 사용하는 문서
- 위키데이터 속성 P10299를 사용하는 문서
- 위키데이터 속성 P10608을 사용하는 문서
- 위키데이터 속성 P10832를 사용하는 문서
- 위키데이터 속성 P11249를 사용하는 문서
- 위키데이터 속성 P11646을 사용하는 문서
- 위키데이터 속성 P11729를 사용하는 문서
- 위키데이터 속성 P12204를 사용하는 문서
- 위키데이터 속성 P12362를 사용하는 문서
- 위키데이터 속성 P12754를 사용하는 문서
- 위키데이터 속성 P13049를 사용하는 문서
- 운영체제 기술