4. 문맥 교환에 대해 설명하시오
•
CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업
•
실행 상태에서 나가는 프로세스 제어 블록(PCB) 에는 지금까지의 작업 내용을 저장하고, 실행 상태로 들어오는 프로세스 제어 블록의 내용으로 CPU를 다시 세팅하는 것
•
문맥 교환이 일어나는 경우
◦
프로세스가 자신에게 할당된 시간을 다 사용했을 때
◦
인터럽트가 걸렸을 때
▪
eg. 프로세스가 자신에게 주어진 메모리 공간을 넘어가려 한다면 인터럽트가 발생하여 인터럽트 관리 프로세스와 실행 중인 프로세스의 문맥 교환이 일어난다
1.
실행 중인 프로세스의 제어 블록을 저장
2.
인터럽트 관리 프로세스를 실행 상태롤 만든다
3.
인터럽트 관리 프로세스가 메모리 범위를 넘어선 프로세스를 강제 종료하고 인터럽트 처리를 마친다
5. 프로세스를 구성하는 코드 영역, 데이터 영역, 스택 영역에 대해 설명하시오
1.
코드 영역
•
프로세스가 실행할 프로그램의 코드가 있다
•
읽기 전용
2.
데이터 영역
•
프로그램이 사용하려고 정의한 변수와 파일 등의 데이터가 있는 곳
•
데이터는 변하는 값이기 때문에 읽기와 쓰기가 가능하다
3.
스택 영역
•
운영체제가 프로세스를 실행하기 위해 커널이 유지하는 자료 구조
•
함수 호출시 기록하고 종료되면 제거한다.
•
함수 안에서 선언된 지역변수, 매개변수, 리턴값, 돌아올 주소를 저장
4.
힙 영역
•
대부분의 데이터는 데이터 영역에 할당되지만 일부는 프로그램이 실행되는 동안 할당된다
정적 vs. 동적 할당 영역
정적 할당 영역 | 동적 할당 영역 |
코드 영역 & 데이터 영역 | 스택 영역 & 힙 영역 |
프로세스가 실행되기 직전에 위치와 크기가 결정되고 실행되는 동안 변하지 않는다 | 프로세스가 실행되는 동안 만들어지는 영역으로 사용자의 입력에 따라 크기가 늘어났다 줄어들기도 한다 |
오버 플로우
•
한정된 메모리 공간이 부족하여 메모리 안에 있는 데이터가 넘쳐 흐르는 현상
이다
•
힙은 메모리 위쪽 주소부터 할당되고, 스택은 메모리 아래쪽 주소부터 할당되기 때문에 각 영역이 상대 공간을 침범하는 일이 발생할 수 있다
•
이때 힙이 스택을 침범하는 경우를 힙 오버 플로우라 하고, 스택이 힙을 침범하는 경우를 스택 오버 플로우라고 한다
6. fork() 시스템 호출의 장점을 설명하시오
•
프로세스는 프로그램을 실행할 때 새로 생성되기도 하지만 실행 중인 프로세스로 부터 복사해 만들 수도 있다
•
fork()는 프로세스를 복사하는 시스템 호출
•
예) 크롬에서 crtl + n 을 누르면 크롬이 하나 더 생기는 데 이것은 프로세스를 복사한 것
프로세스의 부모 - 자식 관계
•
프로세스를 복사하면 기존의 프로세스는 부모 프로세스가 되고 새로 생긴 프로세스는 자식 프로세스가 되어 서로 연결되게 된다
•
프로세스 제어 블록이 복사되어 똑같은 프로세스가 만들어 지고, 그 중 프로세스 구분자 (PID), 메모리 관리 정보, 부모 프로세스 구분자가 바뀐다. 부모 PCB에서는 자식 프로세스 구분자(CPID) 가 바뀐다
fork() 시스템 호출의 장점
1.
하드디스크로부터 프로그램을 새로 가져오지 않고 기존 메모리에 복사하기 때문에 프로세스 생성 속도가 빠르다
2.
부모 프로세서가 사용하던 모든 자원을 추가 작업 없이 자식 프로세스에 사용할 수 있다
3.
프로세스를 종료하면 프로세스가 사용하던 메모리 영역, 파일, 하드웨어를 정리해야 하는데, 자식 프로세스를 종료하면 자식이 사용하던 자원을 부모 프로세스가 정리 하게 함으로서 시스템을 효율적으로 관리할 수있다