초보개발자 긍.응.성
4. Process - 수행모드와 프로세스 생성 및 교환 본문
수행모드
운영체제는 최소한 두가지의 수행 모드를 가진다. 권한을 가진 정도에 따라 수행 모드가 나뉘게되는데 권한을 덜 가진 모드를 보통 사용자 모드(user mode), 더 높은 권한을 가진 모드를 커널 모드(kernel mode), 시스템 모드(system mode), 제어모드(control mode) 등으로 부른다.
수행모드를 두 가지로 나누는 이유는 사용자 프로그램의 간섭으로 부터 운영체제 및 프로세스 제어블록과 같은 주요 운영체제 테이블을 보호할 필요가 있기 때문이다. 프로세서가 현재 어느 모드에서 수행되고 있는지는 수행모드를 표현하는 프로그램상태워드(PSW)로부터 알 수 있다. 이 비트는 특정 사건에 따라서 변한다. 주로 사용자가 운영체제 서비스를 호출하거나 인터럽트가 운영체제의 한 경로의 수행을 촉발시킬때, 커널모드로 설정된다. 그 제어가 운영체제에서 사용자 프로세스로 복귀할때, 사용자 모드로 설정된다.
프로세스 생성
운영체제가 프로세스를 생성하기로 한다면 생성은 아래와 같은 순서로 진행된다.
- 새로운 프로세스에 프로세스 식별자(Process Identification)을 할당한다. 이 프로세스를 주요 프로세스 테이블에 새로운 항목으로 추가한다.
- 프로세스에 공간을 할당한다. 프로세스 이미지의 모든 요소가 여기에 저장되므로 사용자 주소공간(프로그램 및 데이터), 사용자 스택의 공간이 얼마나 필요할지 알아야한다. 마지막으로, 프로세스 제어블록(PCB)을 위한 공간도 할당되어야한다.
- PCB를 초기화한다. PC와 시스템 스택 포인터를 제외한 나머지 항목을 초기화 하며 프로세스 상태를 준비 또는 준비/보류 상태로 초기화한다.
- 적절한 연결을 설정한다. 예를 들어, 운영체제가 갖고있는 스케줄링 큐에 새로운 프로레스가 준비 또는 준비/보류 큐에 놓여져야 한다.
- 다른 자료구조를 생성 또는 확장한다.
프로세스 교환
1. 프로세스 교환 시점
프로세스 수행을 인터럽트하는 기법은 크게 두 가지가 존재한다. 시스템 인터럽트와 슈퍼바이저 호출(Supervisor call)으로 나눌 수 있으며 작케는 시스템 인터럽트를 인터럽트와 트랩으로 나눌 수 있다
- 인터럽트
인터럽트는 현재 수행 중인 프로세스와는 독립적으로 외부에서 유발되는 여러 종류의 사건에 의해 발생한다. 인터럽트의 예시는 아래와 같다.
- 클럭 인터럽트(Clock Interrupt) - 현재 수행 중인 프로세스가 자신에게 할당된 시간량을 모두 사용할 때 발생한다. 시간이 만료된 프로세스는 준비 상태가 되고 다른 프로세스가 디스패치된다.
- 입출력 인터럽트(I/O Interrupt) - 입출력동작이 완료되면 그 사건에 대해 블록되어 있던 모든 프로세스들을 준비 상태로 전이시킨다. 이후 현재 수행 상태에 있는 프로세스의 수행을 재개할 것인지, 더 높은 우선순위를 가진 프로세스를 위해 현재의 프로세스를 선점할지 결정한다.
- 메모리 폴트(memory falut) - 주기억장치에 있지 않은 워드에 대한 가상메모리 주소를 참조를 처리해야할 때, 입출력 요청을 보내고 메모리 폴트를 유발시킨 프로세스를 블록 상태로 전이시킨다.
- 트랩
트랩은 불법적인 파일 접근 시도처럼, 현재 수행되고 있는 프로세스에서 생성되는 오류나 예외 조건 때문에 발생된다. 트랩이 발동되면 운영체제는 관련 오류 또는 예외 조건이 치명적인지 아닌지를 판단한다. 치명적일 경우, 현재 수행되고 있는 프로세스를 종료 상태로 전이하고 프로세스 교환이 일어난다. 치명적이지 않다면, 오류의 특성과 운영체제의 설계에 따라 복구 또는 사용자에게 통보한다. 이후 프로세스를 교환하거나 그대로 수행을 재개할 수 있다.
- 수퍼바이저 호출(Supervisor call)
수행 중인 프로세스가 Supervisor call을 하는 경우가 있다. 가장 쉬운 예로 수행중인 사용자 프로세스가 파일 개방과 같은 입출력 동작을 요구하는 명령을 수행한다고 하자. 이때 운영체제에게 제어를 넘기로사용자 프로세스는 블록 상태로 전이될 것이다.
2. 모드 전환(Mode switching)과 프로세스 상태 변경
모드 전환(Mode switch)은 프로세스 교환(Process switch)과는 다른 개념이다. 모드 전환은 현재 수행 상태에 있는 프로세스의 상태를 바꾸지 않고 수행될 수 있다. 이 경우, 문맥을 저장하거나 나중에 복구할 때 생기는 오버헤드는 거의 없다. 하지만 현재 수행 상태인 프로세스가 다른 샅애로 전이되면, 운영체제는 그 환경을 크게 변경시켜야 한다.
모드 전환의 순서
- PC의 값을 인터럽트 핸들러 프로그램의 시작 주소로 설정시킨다.
- 사용자 모드를 커널 모드로 전환시켜서 인터럽트 처리 코드가 특권 명령어를 수행할 수 있도록 한다.
프로세스 교환의 순서
- PC와 다른 레지스터를 포함한 처리기 문맥을 저장한다.
- 현재 수행 상태에 있는 PCB를 갱신한다. 그 후 프로세스는 다음 상태(준비 상태나 블록 상태)로 전이되며 전이 원인들 또한 갱신된다.
- 전이된 프로세스의 PCB를 적절한 스케줄링 큐로 옮긴다.
- 다음 수행시킬 프로세스를 선택한다(스케줄링)
- 선택된 프로세스의 PCB를 갱신하고 수행 상태로 전이시킨다.
- 메모리 관리와 관련된 자료구조를 갱신한다
- 선택된 프로세스가 이전의 수행 상태에서 사용하였던 처리기의 문맥을 복원한다. 이는 이전에 저장하였던 처리기 문맥(PC와 레지스터 값)을 처리기로 적재하는 것을 의미한다.
'운영체제(Operating Systems)' 카테고리의 다른 글
3. Process - 운영체제의 프로세스 제어 (0) | 2019.12.02 |
---|---|
2. Process - 프로세스 상태 (0) | 2019.12.02 |
1. Process - 프로세스란? (0) | 2019.12.02 |