3.[os] 프로세스와 스레드
1.프로그램과 프로세스
- 프로그램은 저장장치에 저장되어 있는 정적인 상태이고, 프로세스는 실행을 위해 메모리에 올라온 동적인 상태이다.
2.프로세스의 상태
생성 상태: 프로그램을 메모리에 가져와 실행 준비가 완료된 상태
준비 상태: 실행을 기다리는 모든 프로세스가 자기 차례를 기다리는 상태. 실행될 프로세스를 CPU 스케줄러가 선택.
실행 상태: 선택된 프로세스가 타임 슬라이스를 얻어 CPU를 사용하는 상태. 프로세 스 사이의 문맥 교환이 일어남.
대기 상태: 실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때까지 기다리는 상태. 입출력이 완료되면 준비 상태로 감.
완료 상태: 프로세스가 종료된 상태. 사용하던 모든 데이터가 정리됨. 정상 종료인 exit와 비정상종료인 abort를 포함.
3.프로세스 제어 블록
- 프로세스를 실행하는 데 필요한 중요한 정보를 보관하는 자료 구조로, 모든 프로세스는 고유의 프로세스 제어 블록을 가진다. 프로세스 제어 블록은 프로세스 생성 시 만들어져서 프로세스가 실행을 완료하면 폐기된다.
4.문맥 교환
- 두 프로세스의 프로세스 제어 블록 및 이와 관련된 값들을 교환하는 작업을 말한다. 일반적으로 문맥 교환은 한 프로세스가 자신에게 주어진 시간을 다 사용하면 발생하고, 인터럽트가 걸렸을 때도 발생한다.
5.프로세스의복사와전환
- fork() 시스템 호출: 실행 중인 프로세스로부터 새로운 프로세스를 복사하는 함수이다.
- exec() 시스템 호출: 기존의 프로세스를 새로운 프로세스로 전환하는 함수이다.
6.프로세스의 계층 구조
- 부모 프로세스를 복사하여 자식 프로세스를 만드는 방법으로 프로세스끼리 계층 구조를 갖는 것을 말한다. 부모 프로세스는 자신의 자원을 자식 프로세스에 상속하고 자식 프로세스가 종료되면 그 자원을 회수한다
7.스레드
- CPU 스케줄러가 CPU에 전달하는 일 하나를 스레드라고 하며, 하나의 프로세스에는 여러 개의 스레드가 존재하기도 한다.
8.스레드관련용어
- 멀티스레드: 멀티스레드는 프로세스 내 작업을 여러 개의 스레드로 분할함으로써 작업의 부담을 줄이는 프로세스 운영 기법이다
- 멀티태스킹: 운영체제가 CPU에 작업을 줄 때 시간을 잘게 나누어 배분하는 기법 (프로세스가 여러개)
- 멀티프로세싱: CPU를 여러 개 사용하여 여러 개의 스레드를 동시에 처리하는 작업
- CPU 멀티스레드: 한 번에 하나씩 처리해야 하는 스레드를 파이프라인 기법을 이용하여 동시에 여러 스레드를 처리하도록 만든 병렬 처리 기법 (하드웨어적)
9.멀티스레드의 장점
- 응답성 향상: 한 스레드가 입출력으로 인해 작업이 진행되지 않더라도 다른 스레드가 작업 을 계속하여 사용자의 작업 요구에 빨리 응답할수 있다
- 자원 공유: 한 프로세스 내에서 독립적인 스레드를 생성하면 프로세스가 가진 자원을 모든 스레드가 공유하게 되어 작업을 원활하게 진행할 수 있다
- 효율성 향상: 불필요한 자원의 중복을 막음으로써 시스템의 효율이 향상된다
- 다중 CPU 지원: 2개 이상의 CPU를 가진 컴퓨터에서 멀티스레드를 사용하면 다중 CPU 가 멀티스레드를 동시에 처리하여 CPU 사용량이 증가하고 프로세스의 처리 시간이 단축 된다
프로그램이 프로세스가 되려면 운영체제로부터 무엇을 받아야 하는가?
- 프로세스 제어 블록(PCB)
프로세스의 상태 중 CPU를 할당받기 위해 기다리는 상태는 무엇인가?
- 준비 상태
프로세스의 상태 중 입출력 작업을 하기 위해 이동하는 상태는 무엇인가?
- 대기 상태
CPU 스케줄러가 준비 상태에 있는 프로세스 중 하나를 골라 CPU를 할당하는 작업을 무엇 이라고 하는가?
- 디스패치
유닉스에서 ctrl + z 키를 눌러 프로세스가 중단되면 프로세스는 어떤 상태로 바뀌는가?
- 휴식 상태
실행 상태에서 하나의 프로세스가 나가고 새로운 프로세스가 들어오는 상황을 무엇이라고 하는가?
문맥 교환
실행 중인 프로세스로부터 새로운 프로세스를 복사하는 시스템 호출은 무엇인가?
fork() 시스템 호출
프로세스의 골격은 그대로 둔 채 코드 영역만 바꾸는 시스템 호출은 무엇인가?
exec() 시스템 호출
부모 프로세스가 기다리지 않아 자원이 회수되지 못하고 계속 살아 있는 프로세스는 무엇 인가?
- 고아 프로세스
프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위로서 가벼운 프로세스라고 불리는 것은 무엇인가?
- 스레드
고아 프로세스를 방지하기 위해 부모 프로세스는 어떤 시스템 호출을 사용하는가?
- exit(), return()
작업이 끝난 프로세스의 자원을 회수하는 행위를 무엇이라고 하는가?
- 가비지 컬렉션
모든 프로세스를 부모-자식 관계로 만들어 자원 회수를 용이하게 하는 프로세스의 구조는 무엇인가?
- 프로세스 계층 구조