Context Switch
CPU가 실행하는 프로세스를 교체하는 행위이다.
우리 인간은 비싼 CPU 가만히 못놔두기 때문에, 계속 일을 시켜야한다.
문맥전환을 통해 여러 프로세스나 스레드가 동시에 실행할 수 있다(실행하는 것 처럼 보이게 할 수 있다)
컨텍스트 스위칭이 일어나는 경우
- 주어진 Time Slice를 다 사용했을 때
- I/O 작업
- 다른 리소스를 기다림
- 인터럽트
RISC가 상대적으로 레지스터가 더 많기 때문에 컨텍스트 스위칭에 오버헤드가 더 크다. 흥미로운 내용이다.
I/O, 인터럽트, 시스템콜 등이 발생하면 PCB에 현재 실행하던 프로세스의 상태를 저장하고
스케쥴링에 의해 선택된 새로운 프로세스의 정보를 PCB에서 받아서 실행한다.
이후 다른 인터럽트가 발생하면 다른 프로세스를 선택하고 상태값을 받아와서 실행하기 때문에
마치 끊기지 않고 동시에 실행되는 것 처럼 보인다.
Process Creation
UNIX 기준 프로세스를 새로 생성하면 자식 프로세스는 기본적으로 부모 프로세스의 복사본이다. PID는 다르다.
이는 효율성을 위해서다. 프로세스 새로 생성하려면 많은 데이터가 필요하고 이는 리소스를 많이 사용한다는 의미이다.
때문에, 새로운 프로세스를 생성할 때는 fork()를 통해 일단 부모 프로세스의 데이터를 복사한 뒤 exec하는 방법을 택한다.
exec() 함수는 PCB를 실행하려는 프로세스의 정보로 전부 교체한다. return을 포함해서 말이다.
즉 새로운 프로그램을 적재하게 되는 것이다.
근데 여기서도 의문을 제기할 수 있다. 기껏 fork 했는데 exec하느라 프로세스 정보를 전부 교체한다면 비효율 적이잖아요.
이런 비효율도 해결하기 위해 대부분의 OS에서는 Copy On Write(COW)를 채택한다
Copy On Write
자세한 Virtual Memory 개념은 나중에 작성할 예정이다.
페이지 테이블은 논리 주소와 피지컬 어드레스를 맵핑시켜주는 자료 구조이다.
프로세스는 각자 페이지 테이블을 가지는데, 처음에 자식 프로세스를 생성하면 부모 프로세스의 페이지 테이블을 복사하게 된다.
페이지 테이블과 맵핑되는 physical memory, 즉 부모 프로세스와 자식 프로세스의 변수가 같은 물리 공간을 가리키고 있다는 의미이다.
프로세스가 생성될 때 공유 자원에 관해서 read-only로 생성된다.
때문에 공유 자원에 대해서 write하려고 했을 때 page fault가 발생하게 되고 page fault handler를 호출한다.
핸들러는 write하려는 페이지를 새로운 페이지에 복사한 뒤 페이지 테이블을 업데이트 시켜준다.
fork 시스템콜 시점이 아닌 write하려는 시점에 복사가 일어나기 때문에
Copy On Write 라고 한다.
'운영체제' 카테고리의 다른 글
[OS4] Process, PCB (0) | 2024.03.04 |
---|---|
[OS3] Monolithic Kernel, Micro Kernel, Hypervisor (0) | 2024.02.23 |
[OS3] Kernel Structure, Layering, Modularity, System call (0) | 2024.02.23 |
[OS2] Multi programming, Multi Tasking (0) | 2024.02.21 |
[OS1] Abstraction, Policy (0) | 2024.02.20 |