프로세스 제어는 3가지 작업으로 나뉜다.
1) 수행모드
2) 프로세스 생성
3) 프로세스 교환
▷ 수행모드
처리기의 수행모드는 두 가지로 나뉜다.
1. 커널모드 2. 유저모드
커널모드란 처리기가 커널 명령어를 실행하는 상태를 의미하고 유저모드란 처리기가 유저 명령어를 실행하는 상태를 의미한다. CPU는 PSW( 프로그램 상태 워드 ) 레지스터로 시스템 상태를 저장하는데, 이때 PSW 중 1bit가 수행모드를 나타낸다. 0이면 사용자모드, 1이면 시스템모드이다.
그렇다면 커널 명령어와 유저 명령어를 두 가지 모드로 구분하여 처리하는 것일까?
지난 포스팅을 예로 들어보겠다.
준비큐에 들어있는 프로세스는 OS의 제어에 따라 처리기를 할당받아 처리된다.
PCB1 할당 -> 디스패치 -> PCB2 할당 -> 디스패치 -> PCB4 할당 -> 디스패치 -> PCB3 할당 -> 디스패치
디스패치(dispatch) 작업은 커널 메모리의 디스패처(Dispathcer) 프로그램이 담당한다.
처리기가 프로세스 명령과 디스패처 명령을 번갈아 처리하면서 커널영역 메모리와 유저영역 메모리를 번갈아 접근한다. 커널 영역에는 디스크를 비롯한 컴퓨터의 중요 정보가 들어있다. 처리기는 커널 명령과 유저 명령을 번갈아 처리하기에 언제든 유저명령을 처리하다가 커널 영역의 메모리에 접근할 수 있다. 그러므로 악의적 목적을 가진 프로그램이 커널 메모리에 접근할 수 있게 된다.
유저 명령을 처리할 때에는 시스템을 유저모드로 변환시켜 커널 영역 메모리에 접근하지 못하도록 막고 커널 명령 처리시에만 커널 모드로 변환시켜 커널 영역 메모리 접근을 허용시켜야 안전하다.
▷ 프로세스 생성
1. 유일한 프로세스 식별자 할당
2. 프로세스에 공간 할당 ( 프로세스 이미지 + PCB 공간, 공유 영역은 적절한 연결 설정 )
3. 프로세스 제어블록 초기화 ( 본인 ID 및 부모 프로세스 ID, 대부분 0으로 초기화 )
4. 적절한 연결 설정 ( 적절한 준비 큐 혹은 준비/보류 큐에 넣는다. )
5. 다른 자료구조를 생성 또는 확장
▷ 프로세스 교환
클럭 인터럽트( 시간할당량 ) , 입출력 인터럽트, 메모리 폴트 ( 가상메모리 주소 참조 ) , 트랩 발생 등이 발생하면 프로세스 교환 ( Process Switching )이 일어난다.
프로세스 교환에는 두 가지가 있다.
1) 모드 전환 ( 유저모드 → 커널모드 , 커널 모드 → 유저모드 )
프로세스A가 수행 중 I/O 인터럽트가 발생했다고 가정하자.
프로세스A의 PSW, PC 그 외 프로세스 이미지 정보를 PCB에 저장한다.
그리고 처리기의 PC는 인터럽트 핸들러를 가리킨다.
유저모드에서 커널모드로 전환
인터럽트 처리
인터럽트된 프로세스A 다시 복귀
유저모드에서 실행 중이던 프로세스A는 그대로 수행상태를 유지하면서 잠시 인터럽트되었다가 다시 복귀하는 것을 의미한다.
2) 프로세스 상태변경
프로세스 상태변경은 다른 프로세스와의 교환을 위해 프로세스의 상태를 변경시키는 작업이다.
1) 프로그램 카운터 와 다른 레지스터 정보를 처리기 문맥에 저장
2) 수행상태의 프로세스는 준비, 블록, 준비보류, 종료 상태 중 하나로 PCB 갱신
3) 상태에 맞는 큐에 PCB 옮기기
4) 다음 프로세스 선택 및 갱신 및 처리기 문맥 복원
참고자료
'CS > OS' 카테고리의 다른 글
[운영체제] KLT( Kernel Level Thread ) VS ULT ( User Level Thread ) (0) | 2021.10.11 |
---|---|
[운영체제] 쓰레드 ( Thread ) (0) | 2021.10.11 |
[운영체제] 프로세스 상태 (0) | 2021.10.11 |
[운영체제] PCB의 구성요소 (0) | 2021.10.11 |
[ 운영체제 ] PCB ( Process Control Block ) (0) | 2021.09.29 |