yoooniverse
[운영체제] 쉽게 배우는 운영체제 3장 연습문제 답 본문
3장 요약
#1 프로그램, 프로세스
프로그램 : 저장장치에 저장되어 있는 정적인 상태,
프로세스 : 실행을 위해 메모리에 올라와 있는 동적인 상태
#2 프로세스 상태의 구분
생성 상태 : 프로그램을 메모리로 가져왔고, 실행 준비가 완료된 상태
준비 상태 : 실행을 기다리는 프로세스가 자신의 차례가 오기를 기다리는 상태. 자신의 차례가 되면 CPU스케줄러가 선택해서 CPU로 데려감
실행 상태 : CPU를 사용하고 있는 상태. 이 때 CPU로부터 타임 슬라이스를 얻는다. 프로세스 간 문맥 교환이 일어나면 CPU를 사용하는 프로세스가 바뀌는 것.
대기 상태 : 실행 상태의 프로세스가 입출력을 요청했을 때, 입출력이 완료될 때까지 기다리는 상태를 이름. 입출력이 완료되면 준비 상태로 감.
완료 상태 : 프로세스가 종료된 상태. 사용하던 모든 데이터가 정리됨. 종료의 유형은 (1)정상적 종료인 exit, (2)비정상적 종료인 abort가 있음.
#3 프로세스 제어 블록(PCB_Process Control Block)
정의) 프로세스를 실행하는 데 필요한 중요한 정보를 보관하는 자료 구조.
모든 프로세스는 고유의 PCB를 가짐. PCB는 프로세스 생성 시 만들어진다. 프로세스가 실행 완료되면 폐기됨.
#4 문맥 교환(Context Switching)
두 프로세스의 PCB 및 이와 관련된 값들을 교환하는 작업.
(CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업. 이때 두 PCB 내용이 변경됨.)
언제 발생하는가? 한 프로세스가 자신에게 주어진 타임 슬라이스를 다 썼을 때, 인터럽트가 걸렸을 때 등
#5 프로세스 복사, 전환
fork( ) : 실행중인 프로세스로부터 새로운 프로세스를 복사하여 생성하는 함수
exec( ) : 기존의 프로세스를 새로운 프로세스로 전환하는 함수
#6 프로세스의 계층 구조
계층 구조를 만드는 방식 : 부모 프로세스를 복사하여 자식 프로세스를 생성
부모 프로세스가 자신의 자원을 자식 프로세스에 상속 -> 자식 프로세스가 종료되면 부모 프로세스가 그 자원을 회수
#7 스레드
정의) CPU 스케줄러가 CPU에 전달하는 일의 단위
하나의 프로세스에 여러 개의 스레드가 존재할 수 있음
#8 스레드 관련된 용어
멀티스레드 : 프로세스 내 작업을 여러 개의 스레드로 분할, 작업의 부담을 줄이는 프로세스 운영 기법
멀티태스킹 : 운영체제가 CPU에 작업을 줄 때 시간을 잘게 나누어 배분하는 기법
멀티프로세싱 : CPU를 여러 개 사용하여 여러 개의 스레드를 동시에 처리하는 작업 환경
CPU 멀티스레드 : 한 번에 하나씩 처리해야 하는 스레드를 파이프라인 기법을 이용하여 동시에 여러 스레드를 처리하도록 만든 병렬 처리 기법
#9 멀티스레드의 장점
(1) 응답성이 향상된다
한 스레드가 입출력으로 인해 작업이 진행되지 않을 때, 다른 스레드가 작업을 계속 진행해 사용자의 작업 요구에 빠르게 응답할 수 있다.
(2) 자원 공유의 효과
한 프로세스 안에서 독립적인 스레드를 생성하면, 프로세스가 가진 자원을 모든 스레드가 공유하게 되어서 작업을 원활하게 진행할 수 있다.
(3) 효율성 향상
프로세스를 여러개 만들지 않아도 되므로 불필요한 자원의 중복을 막을 수 있고, 시스템의 효율이 증가한다.
(4) 다중 CPU 지원
2개 이상의 CPU를 가진 컴퓨터에서 멀티스레드를 사용하면 다중 CPU가 멀티스레드를 동시에 처리하게 된다.
CPU의 사용량이 증가하고 프로세스의 처리 시간이 단축된다.
#10 멀티스레드의 모델
- 사용자 스레드 : 사용자 모델에서 관련 라이브러리를 사용하여 구현, 라이브러리는 커널이 지원하는 스케줄링이나 동기화 같은 기능을 대신 구현해줌
- 커널 스레드 : 커널이 멀티스레드를 지원하는 방식
- 멀티레벨 스레드 : 사용자 스레드와 커널 스레드를 혼합한 방식. a.k.a 하이브리드 스레드
#extra 동적 할당 영역
정적 할당 영역 : 프로세스 실행 직전에 위치와 크기가 결정됨. 실행되는 동안 변하지 않음.
동적 할당 영역 : 프로세스가 실행되는 동안 해당 영역의 크기가 변할 수 있음.
(1) Stack
구조 : First In, Last Out
함수호출 시 무슨 일을 하는가?
- 함수가 호출되고 종료되면 되돌아올 메모리의 주소를 저장
- 지역변수를 저장할 때
프로세스를 작동하기 위해 커널이 유지하는 자료 구조. 스레드가 작동하는 동안 추가되거나 삭제되는 동적할당 영역
(2) Heap
동적으로 할당되는 변수 영역
프로그램이 실행되는 동안 할당되는 데이터 영역. (원래 데이터는 정적으로 할당됨)
ex) malloc( ) 함수
정적으로 선언된 변수 : 프로그램이 실행되는 내내 일정 크기의 메모리를 차지하고 있음. 변수가 사용되는지의 여부와 관계 X
동적으로 선언된 변수(malloc의 경우) : malloc을 만나면 그 때 메모리에 자리를 차지. 그리고 그 자리는 heap 영역에 존재한다. 해당 변수가 필요없어지면 free( ) 함수로 메모리 영역을 반환
#extra exit( ), wait( ) 시스템 호출
- exit( ) or return( ) : 자식 프로세스가 끝난 것을 부모 프로세스에게 알려주기 위해 사용
- 고아 프로세스 : 부모 프로세스가 먼저 종료되어 자식 프로세스의 exit( ) 함수가 갈 곳을 잃은 경우.
- wait( ) : 부모 프로세스에서 해당 시스템 호출이 사용되면, 자식 프로세스가 종료되었을 때 다음 문장을 실행. 고아 프로세스의 생성을 방지.
연습문제
1. 프로그램이 프로세스가 되려면 운영체제로부터 무엇을 받아야 하는가? PCB(프로세스 제어 블록)
2. 프로세스의 상태 중 CPU를 할당받기 위해 기다리는 상태를 무엇인가? 준비 상태
(준비 상태 : 실행을 기다리는 프로세스가 자신의 차례가 오기를 기다리는 상태. 자신의 차례가 되면 CPU스케줄러가 선택해서 CPU로 데려감)
3. 프로세스의 상태 중 입출력 작업을 하기 위해 이동하는 상태는 무엇인가? 대기 상태
4. CPU 스케줄러가 준비 상태에 있는 프로세스 중 하나를 골라 CPU를 할당하는 작업은? dispatch(PID)
PID: 프로세스 구분자
5. 유닉스에서 ctrl + z 를 눌러 프로세스가 중단되면 프로세스는 어떤 상태로 바뀌는가? 휴식 상태
프로세서가 작업을 일시적으로 쉬고 있는 상태. 사용하던 데이터가 메모리에 그대로 있고, 프로세스 제어 블록도 유지되어 프로세는 멈춘 지점에서부터 재시작할 수 있음.
6. 실행 상태에서 하나의 프로세스가 나가고 새로운 프로세스가 들어오는 상황을 무엇이라고 하는가? 문맥 교환
7. 실행 중인 프로세스로부터 새로운 프로세스를 복사하는 시스템 호출은 무엇인가? fork()
8. 프로세스의 골격은 그대로 둔 채 코드 영역만 바꾸는 시스템 호출은 무엇인가? exec()
9. 부모 프로세스가 기다리지 않아 자원이 회수되지 못하고 계속 살아 있는 프로세스는 무엇인가? 고아 프로세스
10. 프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위로서 가벼운 프로세스라고 불리는 것은 무엇인가? 스레드
11. 고아 프로세스를 방지하기 위해 부모 프로세스는 어떤 시스템 호출을 사용하는가? wait( )
12. 작업이 끝난 프로세스의 자원을 회수하는 행위를 무엇이라고 하는가? garbage collection
13. 모든 프로세스를 부모-자식 관계로 만들어 자원 회수를 용이하게 하는 프로세스의 구조는? 프로세스 계층 구조
심화문제
1. 다섯 가지 프로세스 상태도 그리기
2. 프로세스의 상태 중 휴식 상태와 보류 상태에 대해 설명
휴식 상태 : 프로세스가 작업을 일시적으로 쉬고 있는 상태.
사용하던 데이터는 메모리에 그대로 있고, PCB도 유지됨. 프로세스는 멈춘 지점에서부터 재시작할 수 있음
보류 상태 : 프로세스가 메모리에서 잠시 쫓겨난 상태
메모리가 꽉 차서 일부 프로세스를 메모리 밖으로 내보낼 때
프로그램에 오류가 있어서 실행을 미루어야 할 때
바이러스와 같이 악의적인 공격을 하는 프로세스라고 판단될 때
매우 긴 주기로 반복되는 프로세스라 메모리 밖으로 쫓아내도 큰 문제가 없을 때
입출력을 기다리는 프로세스의 입출력이 계속 지연될 때
3. 프로세스 제어 블록의 구성에 대해 설명
- 포인터 : 프로세스가 준비 상태, 대기 상태에 있을 때 큐로 연결되어 있기 위해 사용됨
- 프로세스 상태 : 해당 프로세스가 어떤 상태(생성, 준비, 실행, 대기, 보류 준비, 보류 대기 등)에 있는지 나타내는 역할
- 프로세스 구분자 : 운영체제 내에 있는 여러 프로세스를 구별하기 위한 구분자
- 프로그램 카운터 : 다음에 실행된 명령어의 위치를 가리키는 값을 저장
- 프로세스 우선순위 : CPU 스케줄러가 실행 상태로 옮길 때 우선순위에 따라 프로세스를 선택
- 각종 레지스터 정보 : 자신이 사용하던 레지스터의 중간값을 저장(다음에 실행될 때 사용하기 위해)
- 메모리 관리 정보 : 프로세스가 메모리 어디에 위치하는지(위치 정보), 메모리 보호를 위해 사용되는 경계 레지스터 값, 한계 레지스터 값 등이 저장됨
- 할당된 자원 정보 : 프로세스를 실행하기 위해 사용하는 입출력 자원, 오픈 파일 등에 대한 정보
- 계정 정보 : 계정 번호, CPU 할당 시간, CPU 사용 시간 등
- PPID & CPID : 부모 프로세스 구분자(Parent PID), 자식 프로세스 구분자(Child PID)
4. 문맥 교환에 대해 설명
CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업. 이때 두 프로세스의 PCB 내용이 변경됨
5. 프로세스를 구성하는 코드 영역, 데이터 영역, 스택 영역에 대해 설명
코드 영역 : 프로세스의 본문 (텍스트 영역), 읽기 전용으로 처리됨
데이터 영역 : 코드가 실행되면서 사용하는 변수나 파일 같은 각종 데이터를 모아놓은 곳, 읽기/쓰기 가능
스택 영역 : 운영체제가 프로세스를 실행하기 위해 부수적으로 필요한 데이터를 모아놓은 곳, 숨김 영역
6. fork( ) 시스템 호출의 장점
프로세스의 생성 속도가 빠르다 / 추가작업 없이 자원을 상속할 수 있다 / 시스템 관리를 효율적으로 할 수 있다
7. exec( ) 시스템 호출을 사용하는 이유
프로세스의 구조체를 재활용하기 위해서
(이미 만들어진 PCB, 메모리 영역, 부모-자식 관계를 그대로 사용할 수 있어 편리함)
8. 프로세스 계층 구조의 장점을 설명
여러 작업의 동시 처리 가능 / 용이한 자원 회수(garbage collection)
9. 멀티스레드, 멀티태스킹, 멀티프로세싱, CPU 멀티스레드 비교 설명
멀티스레드 : 프로세스 내 작업을 여러 개의 스레드로 분할, 작업의 부담을 줄이는 프로세스 운영 기법
멀티태스킹 : 운영체제가 CPU에 작업을 줄 때 시간을 잘게 나누어 배분하는 기법
멀티프로세싱 : CPU를 여러 개 사용하여 여러 개의 스레드를 동시에 처리하는 작업 환경
CPU 멀티스레드 : 한 번에 하나씩 처리해야 하는 스레드를 파이프라인 기법을 이용하여 동시에 여러 스레드를 처리하도록 만든 병렬 처리 기법
'운영체제 > 쉽게 배우는 운영체제' 카테고리의 다른 글
[운영체제] 쉽게 배우는 운영체제 4장 CPU 스케줄링 연습문제 답 (0) | 2022.10.26 |
---|---|
[운영체제] 쉽게 배우는 운영체제 4장 CPU 스케줄링 (2/2) (0) | 2022.10.24 |
[운영체제] 쉽게 배우는 운영체제 4장 CPU 스케줄링 (1/2) (0) | 2022.10.22 |
[운영체제] 쉽게 배우는 운영체제 2장 연습문제 답 (1) | 2022.09.15 |
[운영체제] 쉽게 배우는 운영체제 1장 연습문제 답 (0) | 2022.09.07 |