-
Process SwitchCS/OS(운영체제) 2022. 4. 12. 20:31728x90
Mode Switch
- 유저 모드와 커널 모드 사이의 프로세서를 변경하는 것
- 모드 스위치는 현재 실행중인 상태의 프로세스의 상태를 변경하지 않고 발생할 수 있다.
- 이 경우 내용의 저장/복원이 상대적으로 적은 오버헤드를 사용한다.
Process Switch(context switch)
- 한 프로세스에서 다른 프로세스로 프로세서를 변경하는 것.
- 현재 프로세스의 프로세서 내용을 저장한다.
- 현재 프로세스의 PCB를 업데이트한다. (Ready,Blocked,etc...)
- 프로세서의 PCB를 적절한 큐로 이동한다.
- 실행을 위한 다른 프로세스를 선택한다. (call schedule())
- 선택된 프로세스의 PCB를 업데이트한다. (Running)
- 메모리 관리를 위해 TLB를 업데이트한다.
- 선택된 프로세스의 프로세서 내용을 복구한다.
따라서, 프로세스 스위치는 모드 스위치보다 더 많은 노력을 필요로 한다.
프로세스 스위치는 인터럽트 , 예외 , 시스템 콜 등의 상황에서 발생한다.
Process Switch Overhead
- PCB로부터 or PCB 안으로 내용을 저장/복원한다.
- 프로세스의 상태를 업데이트한다.
- 실행할 다음 프로세스를 찾는다.
- TLB는 리로드 되어야 한다. (MMU)
- 캐시의 지역성(시간&공간)을 상실한다. (그러므로 더 많은 캐시가 miss된다.)
OS의 실행 모델
Nonprocess Kernel
- 보편적인 접근 방식중 하나, 흔한 다른 오래된 운영체제
- 커널은 분리된 entity로써 실행된다.
Execution with User Processes ( Common in OS )
- 유저 프로세스의 내용 안에 있는 모든 OS 함수들을 실행한다.
- 각 프로세스 이미지는 프로그램, 데이터 , 그리고 커널을 위한 스택을 포함한다.
- 분리된 커널 스택은 커널 모드 안에서 프로세스가 실행되는 동안 사용된다.
Process-Based Operating System ( Modular OS )
- 몇몇의 중요하지 않은 OS 함수들은 분리된 프로세스들로써 실행된다.
Kernel Stack
- 각 프로세스들은 2개의 스택을 가지고 있다.
User space stack - 유저 코드가 실행될 때 사용된다.
Kernel space stack - 프로세스 내용 안에 커널 코드가 실행될 때 사용된다. (ex.시스템 콜 동안)
이점 - 유저 스택이 corrupted 되더라도 커널은 실행할 수 있다.
- 버퍼 오버플로우와 같은 공격에도 커널은 크게 영향받지 않는다.
Schedule function (Selection function)
- ready 상태의 프로세스들 사이에서 다음에 실행할 프로세스를 결정한다.
- 스케줄 함수는 우선순위 또는 프로세스의 실행 특성을 기준으로 삼는다.
- 스케줄링은 프로세스 스위칭 메커니즘에 의해 강요된다.
Saving and Restoring Context
- 프로세스 스위치는 커널이 제어권을 얻었을 때 발생될 수 있다.
- 프로세스는 시스템 콜이나 예외를 요청한다.
- 결국, 저장 및 복원 함수는 하드웨어 안에서 수행된다.
프로세스 스위치 동작 방식
현재 프로세스 P의 내용을 P의 PCB에 저장함(저장과 동시에, PC는 save_context()의 끝을 가르키고, 명령을 return함)
-> in_progess를 check함(0임) -> in_progress를 1로 설정함 -> 다른 프로세스의 내용을 복원함. (이제부터 다른 프로세스 Q의 시간) -> 결국, 다른 프로세스가 restore_context()를 수행할 때, 프로세스 P로 되돌아옴. -> PCB에서 내용을 로드하여 프로세스 P를 재개함 -> (Recall) PC가 save_context()로부터 return을 가리키고 있었으므로, process_switch()로 돌아감 -> in_progress()를 체크.(1임) -> sys_???이 프로세스 P로 돌아감 -> 더이상 PCB 내용이 필요가 없어짐. -> CPU를 유저 모드로 재설정 -> 스택에서 return address를 pop.
Process Creation(프로세스 생성)
Directed Process Creation
- 새로운 메모리 공간을 할당함(실행파일과 PCB를 위한 메모리)
- 새로운 메모리 공간으로 실행파일을 로드함 (메모리 안으로 code와 데이터를 load) , call stack을 생성함
- PCB를 초기화함(PCB를 생성하고 시작함)
- 새 프로세스를 시작함 (read-list에 process를 put)
Cloning Process Creation
Cloning:
- 자식 프로세스는 부모 프로세스 그대로의 복제품임.
- fork() 시스템 콜을 호출함.
- text,data,stack,PCB를 복제함
- pid와 relation을 수정함
- read-list에 새로운 PCB를 추가함
Replacing:
- PID의 변경은 없으나 프로세스의 기계 코드 , 데이터 , heap , stack이 새로운 프로그램으로 대체된다.
Copy on Write (COW)
- 모든 부모 페이지는 초기에 공유된 상태로 표시된다.
- 공유된 페이지의 데이터가 변경될 때, 운영체제는 페이지를 복제한다.
- 따라서 부모 및 자식은 변경된 페이지의 다른 복사본을 가진다. ( 그 외 모든 다른 페이지들은 같은 상태로 남아있음 )
Process Termination(프로세스 종료)
Voluntary termination : exit(status)
- 메인 루틴에서 복귀한다.
- exit 함수라고 불린다.
- 프로세스 종료로 이어진다.
- 자식으로부터 부모까지 ( wait() 함수를 통해 ) 데이터를 출력한다.
- 프로세스의 자원들이 운영체제에 의해 할당이 해제된다.
Involuntary termination
- 다른 프로세스 (parent) 또는 다른 운영체제에 의해 종료된다.
- kill(pid, signal) or abort() 함수.
- default action이 종료되는 신호를 수신한다.
Zombie
- exit() 함수에 의해 프로세스가 종료될 때, 커널이 시스템으로부터 즉시 PCB를 제거하지 않는것.
- 프로그램이 더이상 실행되지 않아도 PCB는 운영체제 안에 여전히 존재하게 된다.
Reaping
- 종료 상태가 부모 프로세스로 전달되는 것.
- 부모 프로세스에 의해 수행된다. ( using wait() )
실행 옵션(Execution options)
- 부모와 자식은 동시에 실행된다.
- 부모는 자식이 종료될 때 까지(Reaping) 기다린다.
- 부모 프로세스는 wait() 시스템 콜을 사용함으로써 자식 프로세스가 종료되는 것을 기다린다.
728x90'CS > OS(운영체제)' 카테고리의 다른 글
인터럽트(Interrupts) (0) 2022.04.17 컴퓨터 하드웨어(Computer Hardware) (0) 2022.04.17 Process Scheduling (0) 2022.04.12 Program & Process (0) 2022.04.12 Resource Protection & System Call (0) 2022.04.11