<운영체제 TIL 목록>
1. 운영체제란? 목적? 분류?
2. 인터럽트란? 컴퓨터 시스템 동작원리로 알아보자.
3. 하드웨어, 메모리 및 메모리 보안 방법?
4. 프로그램의 구조, 실행 과정?
5. 인터럽트, 문맥 교환(컨택스트 스위칭), PCB 정의와 차이?
6. 프로세스란? 6가지 상태? 스케줄러?
7. 프로세스 생성? 자식 부모 관계를 이용한 협력?
8. 스레드, 멀티스레드란? 프로세스와의 차이?
8. CPU 스케줄링란? 종류 평가 기준?
9. ''업데이트 예정"
1. 프로세스란?
- 정의: 프로그램을 구동하여 프로그램의 상태 혹은 그 자체가 메모리 상에서 실행되는 작업 단위(출처: 위키백과)
모든 멀티프로그래밍은 프로세스의 개념을 기반으로 동작한다. 프로세스는 시분할 시스템의 최소 작업 단위이기 때문이다. 이때 프로그램이 구동되어 메인 메모리 상에 올라왔을 때 프로그램 작업 단위도 프로세스지만, 꼭 메인 메모리 위에 올라와있지 않아도 된다. 중지 상태의 경우 프로세스의 상태가 메모리에 존재하지만 메인 메모리에 할당 받은 공간은 현재 없을 수도 있기 때문이다. 프로세스에 대해 알려면 프로세스의 문맥에 대해 알고 있어야한다. 프로세스 문맥은 컨택스트 스위칭에 필수적인 요소이기 때문이다.
- 프로세스 문맥
- 정의: 프로세스가 과거 혹은 현재에 가졌던 실행 상태를 규명하기 위해 필요한 정보.
- 종류
- 하드웨어 문맥: CPU의 수행 상태를 나타내는 값(프로그램 카운터, 레지스터 값 등).
- 프로세스의 주소 공간: 프로세스는 커널, 데이터, 스택 등 독자적인 주소 공간을 가진다. 해당 주소 공간은 프로세스의 실행 상태를 나타내는 중요한 요소다.
- 커널상의 문맥: 운영체제는 프로세스를 관리하기 위한 여러 자료 구조를 둔다. 프로세스 문맥을 저장하기 위한 PCB와 커널상 문맥을 저장하기 위한 커널 스택이 존재한다.
2. 프로세스 상태?
- 5-6가지 상태
- 실행(Running): 프로세스가 CPU를 보유하고 기계어 명령을 실행하고 있는 상태. 프로세서가 하나일 경우 실행 상태인 프로세스는 단 하나다.
- 준비(Ready): 프로세스가 CPU만 보유하면 당장 명령을 실행할 수 있지만 CPU를 할당 받지 못한 상태. 메인 메모리 영역에 물리적인 메모리 주소 공간을 가진다. 실행 상태에서 타이머 인터럽트로 인해 작업이 중지된 프로세스는 준비 상태가 되어 준비 큐로 삽입된다. I/O 작업을 마친 프로세스 또한 스케줄러에 의해 준비 큐로 들어갈 수 있다. 이외 프로세스가 시작된 경우, 서스펜스 상태에서 스왑 인에 의해 넘어올 수 있다.
- 봉쇄(Blocked, wait, sleep): 프로세스가 CPU를 할당 받더라도 당장 명령을 실행할 수 없는 상태. I/O 장치 큐 혹은 공유데이터 큐에 존재하는 경우 동기화 작업을 해야하기 때문에 CPU를 할당 받더라도 당장 명령을 실행할 수 없다. 이러한 프로세스를 봉쇄 상태에 있다고 말한다.
- 시작(New): 프로그램이 실행 후 프로세스로서의 각종 자료 구조를 할당 받았지만 아직 메인 메모리 내 공간 획득을 못 받은 상황.
- 완료(Terminated): 프로세스가 종료되었지만, 운영체제가 그 프로세스 관련 자료구조를 완전히 정리하지 못한 상태.
- (중지, Suspennded): 메모리의 효율적인 관리를 위해 프로세스의 물리적인 메모리 주소 공간이 운영체제에 의해 완전히 빼앗긴 상태.
- 중지 봉쇄(Suspended block): Block 상태에서 메모리 공간에 빼앗긴 상태.
- 중지 준비(Suspended ready): Ready 상태에서 메모리 공간이 빼앗겼거나, 중지 봉쇄 상태에서 Block으로 만든 작업이 완료된 상태.
3. 프로세스의 상태 전이
- 디스패치(Dispatch): Ready 큐 맨 앞에 있는 프로세스가 CPU를 점유하게 만드는 행위.
- 보류(Block): CPU를 사용하던 프로세스가 I/O 작업이 필요한 경우 CPU를 스스로 반납하고 Block 상태로 넘아간다.
- 깨움(WakeUp): 입출력 작업 등 기다리던 사건이 끝났을 경우 레디큐로 이동하여 준비 상태가 되는 작업.
- 시간제한(Timeout): 프로세스가 CPU를 독점하지 못하게 하기 위해 일정 시간이 지나면 타이머 인터럽트 발생 행위
- 스왑 아웃, 인(Swap out, in): 메모리의 효율적인 사용을 위해 당장 사용하지 않거나 오랫동안 사용하지 않을 것으로 예상되는 프로세스의 메모리를 빼앗는 행위(Swap out). 돌려주는 행위는 Swap in이다. 우선 탈취되는 것은 Block 상태에 있는 프로세스다. I/O 장치 등은 cpu에 비해 작업 속도가 느리기 때문이다. 다음 우선 탈취 대상은 Timeout된 프로세스다. 해당 프로세스는 레디 큐 맨 뒤로 가기 때문에 레디큐 내 다른 프로세스보다 시간 중요도가 낮다.
4. 프로세스를 스케줄링 하기 위한 큐?
필요성: 운영체제는 장치들을 관리하기 위한 자료 구조가 필요하다. 보안을 위해 FCFS(first come first served) 방식을 시용하며, 이는 큐로 구현된다.
작동 방식: 다음 작업이 필요할 경우 프로세서는 큐 헤더에 있는 PCB를 가져와 데이터를 처리한다.
- 작업 큐(Job Queue): 시스템 내의 모든 프로세스를 관리하기 위한 큐. 프로세스의 상태와 무관하게 모든 프로세스는 작업 큐에 들어가있다. 작업 큐는 가장 넓은 개념이며, 장치 큐 & 준비 큐는 작업 큐에 속해있다.
- Q1. 꼬리질문: 작업큐가 도대체 뭔가? 장치 큐와 준비 큐가 작업 큐에 속한건 무슨 말인가?
- 장치 큐(Device Queue): I/O 작업을 위해 봉쇄 상태에 있는 프로세스를 관리하기 위한 큐.
- 준비 큐(Ready Queue): 준비 상태에 있는 프로세스를 관리하기 위한 큐
- 공유 데이터를 위한 큐: 공유 데이터를 접근 하기 위해 앞 프로세스가 작업을 완료할 때 까지 대기하는 큐
- 주의: 공유 데이터를 접근한다는 뜻이 무조건 프로세스가 cpu를 사용한다는 말이 아니다. Block 상태이더라도 공유데이터를 사용중이었다면 '접근'한다고 표현한다.
5. 스케줄러?
정의: 프로세스에게 자원을 할당할지 결정하는 커널의 코드
- 장기 스케줄러: 프로세스의 생성과 종료를 관리. 어떤 프로세스를 준비 큐에 진입시킬지, 어떤 프로세스에게 메모리를 할당할지 결정.
- 현대 운영체제에서는 잘 사용x. 과거엔 메모리가 적어 프로세스가 될 프로그램을 관리하는 것이 중요했지만, 현대에는 메모리가 크기에 실행되는 프로그램은 모두 프로세스가 된다. 현대엔 중기 스케줄러가 장기 스케줄러 역할까지 동시 진행.
- 중기 스케줄러: 메모리에 적재된 프로세스의 수를 동적으로 조절.
- 메모리에 적재된 프로세스가 많을 경우 cpu를 할당 받은 프로세스가 당장 실행할 코드를 찾느라 메모리를 왔다갔다하는 성능 비효율이 커질 수 있다. 이에 당장 필요 없는 프로세스를 동적으로 조절할 필요성이 존재한다. 프로세스 중 일부를 선정해 디스크 스왑 영역에 둬서(Swap out) 이를 해결한다..
- 단기 스케줄러: 준비 상태에 있는 프로세스 중에서 어떤 프로세스를 다음번에 실행 상태로 만들지 결정.
'운영체제(OS)' 카테고리의 다른 글
[운영체제] 8. 스레드, 멀티스레드란? 프로세스와의 차이? (0) | 2022.02.22 |
---|---|
[운영체제] 7. 프로세스 생성? 자식 부모 관계를 이용한 협력? (0) | 2022.02.22 |
[운영체제] 5. 인터럽트, 문맥 교환(컨텍스트 스위칭), PCB 정의와 차이? (0) | 2022.02.19 |
[운영체제] 4. 프로그램의 구조, 실행 과정? Easy with TMI (0) | 2022.02.18 |
[운영체제] 3. 하드웨어, 메모리 및 메모리 보안 방법? Easy with TMI (0) | 2022.02.16 |