공부기록
코타쿠
« 2024/11 »
일 |
월 |
화 |
수 |
목 |
금 |
토 |
|
|
|
|
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
관리 메뉴
공부기록
프로세스 제어 본문
CS/OS
프로세스 제어
코타쿠
2021. 5. 3. 23:13
- 수행모드
- User Mode
- 권한을 덜 가진 사용자 모드
- 사용자 프로그램들이 일반적으로 이 모드에서 수행됨
- Kernel Mode
- 더 많은 권한을 가진 시스템 모드, 제어 모드
- 운영체제 커널과 관련
- 두 모드를 이용하는 이유
- 사용자 프로그램의 간섭으로부터 PCB와 같은 주요 운영체제 테이블을 보호하기 위함
- 커널 모드에서 소프트웨어는 프로세서와 명령어, 레지스터들, 메모리에 대한 완전한 제어를 가질 수 있음, 이는 안전하지 않다.
- 모드를 나타내는 방법?
- 프로세스는 Program Status Word의 한 비트를 사용하여 수행모드를 나타냄
- 모드의 전환 방법?
- 사용자가 system call 을 호출하거나 interrupt trigger에 의해서 커널 모드로 전환됨
- 제어가 OS 서비스에서 사용자 프로세스로 돌아오면서 유저 모드로 돌아옴
- 프로세스 생성
- 새로운 프로세스에 유일한 식별자를 할당
- 프로세스에 공간 할당
- 사용자 주소 공간(프로그램 및 데이터), 사용자 스택
- PCB Init
- 프로세스 id, 부모 프로세스 id
- 프로세스 상태
- 적절한 연결 설정
- 스케줄링을 위해 자료구조에 넣는다.
- linked list로 준비 큐에 넣는다거나 하는 작업 수행
- 다른 자료구소 생성, 또는 확장
- 프로세스 교환
- 어떠한 이벤트가 프로세스를 교환하게 하는가?
- 인터럽트, 트랩, 시스템콜에 의해 일어난다.
- 인터럽트
- 현재 수행중인 프로세스와는 별개로 외부에서 유발되는 사건에 의해 발생
- 비동기적인 사건에 반응하기 위함
- 처리의 흐름 : 인터럽트 핸들러 -> 기본적인 관리 작업 처리 -> 관련된 OS 루틴으로 분기
- 종류
- 클락 인터럽트
- 시간할당량 (time slice)를 모두 소진
- I/O 인터럽트
- 사건과 관련있는 블록된 프로세스를 준비상태로 전이시키고 preemptive할지 결정하여 스케줄링
- 메모리 폴트
- 주기억장치에 없는 워드에 대한 가상메모리 주소를 참조해야함
- 해당 주소의 메모리 블록을 보조기억장치에서 주기억장치로 반입해야함
- I/O 요청후, 메모리 폴트를 발생시킨 프로세스는 블락됨
- 다른 프로세스로 교환
- I/O 사건이 완료되면 블록된 프로세스는 준비상태로 전이
- 트랩
- 현재 수행중인 프로세스의 오류 및 예외조건에 의해 일어난다.
- 오류 및 예외조건을 처리하기 위함
- OS는 관련 오류 또는 예외 조건이 치명적인지 아닌지 판단
- 치명적일 경우, 현재 수행되는 프로세스는 종료상태로 전이, 프로세스 교환
- 그렇지 않으면 복구 프로시저를 수행하거나 사용자에게 통보, 프로세스 교환하거나 현재 프로세스의 수행을 재개
- 수퍼바이저 콜
- 명시적인 요청에 의해 일어난다.
- OS 기능을 사용하기 위함
- 수행중인 프로세스가 시스템 콜을 수행
- 모드 전환
- 프로그램 카운터 값을 인터럽트 핸들러 프로그램의 시작 주소로 설정
- 사용자 모드를 커널 모드로 전환 시켜 인터럽트 처리 코드가 특권 명령어를 수행
- 처리기는 반입 절차를 계속 수행하여 인터럽트를 처리하는 인터럽트 핸들러 프로그램의 첫 명령을 가져옴
- 인터럽트된 프로세스 문맥은 PCB에 저장된다.
- 저장된 문맥의 구성
- 인터럽트 핸들러의 수행으로 인해 변경될 수 있는 정보, 인터럽트된 프로그램을 다시 재개해는데 필요한 정보
- PCB의 일부인 processor state information이 필요
- 프로그램카운터, 처리기의 레지스터들의 내용, 스택 정보 등
- 인터럽트 핸들러는 인터럽트에 관련된 몇몇 기본적인 작업을 수행하는 프로그램이다.
- 모드 전환 vs 프로세스 교환
- 모드 전환은 수행중인 프로세스의 상태를 바꾸지 않고 수행가능
- 문맥을 저장하거나 복구할 때 생기는 오버헤드가 거의 없다.
- 프로세스 교환은 환경을 크게 변경시키며 모드 전환에 비해 상당히 많은 작업을 요한다.
- 프로세스 교환 순서
- 프로그램 카운터와 다른 레지스터들을 포함한 처리기 문맥을 저장
- 현재 수행 상태인 프로세스의 PCB를 갱신
- 프로세스는 다음 상태로 전이됨
- 이 프로세스가 수행상태를 떠나는 이유, 과금 정보 및 다른 정보들 또한 갱신되어야 한다.
- PCB를 적절한 큐로 옮긴다.
- 다음 프로세스를 선택
- 다른 프로세스의 PCB를 갱신, 수행상태로 전이
- 메모리 관리와 관련된 자료구조 갱신
- 선택된 프로세스가 이전에 수행 상태에서 사용하였던 처리기 문맥 복원
- 따라서 프로세스 교환은 모드 전환보다 많은 노력을 요구한다.