### 연습문제 ###
- 프로그램이 프로세스가 되려면 운영체제로부터 무엇을 받아야 하는가?
메모리 할당 및 프로세스 제어 블록
- 프로세스의 상태 중 CPU를 할당받기 위해 기다리는 상태는 무엇인가?
준비(ready) 상태
- 프로세스의 상태 중 입출력 작업을 하기위해 이동하는 상태는 무엇인가?
대기(wait) 상태
- CPU 스케줄러가 준비상태에 있는 프로세스 중 하나를 골라 CPU를 할당하는 작업을 무엇이라고 하는가?
디스패치(dispatch)
- 유닉스에서 Ctrl+Z키를 눌러 프로세스가 중단되면 프로세스는 어떤 상태로 바뀌는가?
휴식 상태(일시정지)
- 실행 상태에서 하나의 프로세스가 나가고 새로운 프로세스가 들어오는 상황을 무엇이라고 하는가?
문맥교환(context switching)
- 실행중인 프로세스로부터 새로운 프로세스를 복사하는 시스템 호출은 무엇인가?
fork()
- 프로세스의 골격은 그대로 둔 채 코드 영역만 바꾸는 시스템 호출은 무엇인가?
exec()
- 부모 프로세스가 기다리지 않아 자원이 회수되지 못하고 계속 살아있는 프로세스는 무엇인가?
미아 프로세스
- 프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위로서 가벼운 프로세스라고 불리는 것은 무엇인가?
스레드
- 미아 프로세스를 방지하기 위해 부모 프로세스는 어떤 시스템 호출을 사용하는가?
wait()
- 작업이 끝난 프로세스의 자원을 회수하는 행위를 무엇이라고 하는가?
종료? 메모리 해제? 프로세스 제거?
- 모든 프로세스를 부모-자식 관계로 만들어 자원 회수를 용이하게 하는 프로세스의 구조는 무엇인가?
프로세스 계층구조
### 심화문제 ###
- 다섯가지 프로세스 상태도를 그리시오.
- 프로세스의 상태 중 휴식 상태와 보류 상태에 대해 설명하시오.
휴식 상태는 프로세스의 메모리 정보를 그대로 두고 실행만 일시정지 시키는 것이다. 유닉스 운영체제에서 Ctrl+Z를 누르면 전면 프로세스가 휴식상태에 들어간다.
보류 상태는 프로세스의 데이터를 스왑 영역으로 옮겨두고 일시정지 시키는 것이다. 실행 주기가 매우 긴 프로세스, 입출력이 오랫동안 지연되는 경우 등에 프로세스는 보류상태로 진입한다.
- 프로세스 제어 블록의 구성에 대해 설명하시오.
a. 포인터
부모, 자식 프로세스의 주소 및 자신의 주소, 할당된 자원에 대한 주소를 저장한다. 포인터는 프로세스의 입출력요구에 의한 대기상태 진입 후 입출력 완료 시 입출력 관리자가 이를 알리기 위해 사용하기도 한다.
b. 프로세스 상태
프로세스의 현재 상태 정보
c. 프로세스 구분자
프로세스의 식별을 위한 ID
d. 프로그램 카운터
문맥교환 시에 실행을 시작할 부분을 알기 위해 PC값 저장
e. 프로세스 우선순위
프로세스의 우선순위
f. 레지스터 정보
준비상태 진입시에 실행중이던 레지스터 값들을 저장한다. 프로세스의 다음 CPU 선점시에 이 값들로 CPU 레지스터들을 세팅한다.
g. 메모리 관리 정보
프로세스의 메모리 위치, 경계주소 및 한계주소 등을 가지고있다.
h. 할당된 자원 정보
프로세스가 사용하는 자원에 대한 정보(파일 지시자 등)
i. 계정 보호
계정 번호, CPU 할당 시간, CPU 사용 시간 등
j. 부모 프로세스 및 자식 프로세스의 PID
PPID, CPID
- 문맥교환에 대해 설명하시오
여러 프로세스가 CPU를 나누어 사용하기 위해 커널의 CPU 스케줄러가 프로세스들의 CPU 사용 순서와 시간을 정해준다. 이 때 작업중이던 프로세스가 타임아웃되고 새로운 프로세스에게 CPU 사용 권한을 넘기는 것을 문맥교환 혹은 컨텍스트 스위치라고 한다. 컨텍스트 스위치가 되어 쫓겨나는 프로세스는 프로세스 제어블록에 실행중이던 레지스터 값들을 저장한다. 새로 CPU를 선점하는 프로세스는 자신의 제어블록에 저장돼 있던 이전 실행시의 레지스터 정보들을 참고하여 CPU의 레지스터들을 세팅한다.
- 프로세스를 구성하는 코드영역, 데이터영역, 스택영역에 대해 설명하시오.
a. 코드 영역
프로그램의 코드가 저장되는 메모리 영역이다. 코드는 변하지 않으므로 read-only로 설정되어있다. 코드영역의 크기와 위치는 컴파일시에 결정된다.
b. 데이터 영역
전역 변수, static 변수 등 프로그램 전체에 걸쳐 사용되는 데이터가 할당되는 메모리 영역이다. 데이터는 실행중에 변하므로 read-write로 지정되어 있다. 하지만 변수의 크기는 변하지 않기 때문에 컴파일시에 크기와 위치가 결정된다.
c. 스택 영역
스택 영역은 프로세스가 실행되는 동안에 할당되고 해제된다. 따라서 그 크기가 실행중에 변하고 그 이유로 동적 할당 영역이라 부르기도 한다. 여기에는 함수의 지역변수, 매개변수, 함수 호출이 끝나고 돌아올 위치가 저장된다. FIFO 방식의 데이터 입출력 방식이 일어난다.
- fork() 시스템 호출의 장점을 설명하시오.
새로 프로세스를 만들려면 디스크에서 프로그램을 읽어들여 메모리를 할당하고 제어블록을 생성해야한다. 그러나 fork()를 사용하면 기존 프로세스의 메모리를 그대로 복사하고 제어블록도 PID, PPID, CPID 이외에는 거의 그대로 유지된다. 따라서 추가과정의 생략과 메모리 안에서 처리가 일어나므로 속도가 빠르다. 또한 자식 프로세스가 종료될 때 자원회수를 부모 프로세스가 하므로 OS의 부담이 줄어든다.
- exec() 시스템 호출을 사용하는 이유를 설명하시오.
exec()을 호출하면 현재의 프로세스가 전혀 새로운 프로세스로 전환된다. 하지만 기존에 할당된 메모리 영역과 제어블록 구조체를 그대로 사용할 수 있어 운영 효율이 높아진다.
- 프로세스 계층 구조의 장점을 설명하시오.
유닉스의 경우 shell에서 새로운 커맨드를 입력하여 프로세스를 실행하면 새로운 프로세스가 처음부터 생성되는 것이 아니라 shell 프로세스가 fork()되고 exec()된다. 모든 프로세스는 최고조상 프로세스 아래에 트리 형태로 위치하게 된다. 따라서 프로세스 생성시의 효율성 면에서도 좋고 프로세스가 종료될 때 자원회수를 부모 프로세스가 하므로 운영체제의 부담이 줄어드는 것도 장점이다.
- 멀티스레드, 멀티태스킹, 멀티프로세싱, CPU 멀티스레드를 비교하여 설명하시오.
a. 멀티스레드
하나의 프로세스를 여러 작업으로 나누어 실행하는 것
b. 멀티태스킹
커널의 CPU 스케줄러가 작업을 실행할 때 각 작업마다 타임 슬라이스만큼의 매우 작은 시간을 배분하여 동시에 여러 작업을 실행시키는 것처럼 보이는 기법이다.
c. 멀티프로세싱
CPU 혹은 코어를 여러개 사용하여 여러개의 스레드를 동시에 병렬적으로 처리 작업환경이다.
d. CPU 멀티스레드
명령어 파이프라이닝을 통해 동시에 여러 스레드를 처리하는 병렬처리 기법이다.
'CS > 운영체제' 카테고리의 다른 글
(운영체제) 5 - 프로세스 동기화 연습문제 (0) | 2020.05.15 |
---|---|
(운영체제) 4 - CPU 스케줄링 연습문제 (0) | 2020.05.15 |
(운영체제) 2 - 컴퓨터의 구조와 성능 향상 연습문제 (0) | 2020.05.15 |
(운영체제) 1 - 운영체제 개요 연습문제 (0) | 2020.05.15 |
(운영체제) 11 - 파일 시스템 (0) | 2020.05.15 |