CS/OS
프로세스
우봉수
2023. 3. 20. 13:47
프로세스의 개념
- 배치 시스템 - 잡(jobs)
- 도착한 순서대로 작업을 처리하는 것
- 시분할 시스템 - 사용자 프로그램 또는 테스크
- cpu 라는 자원을 여러명의 사용자가 나누어 쓰는 것
- 프로세스: 실행 중인 프로그램, 프로세스의 실행은 순차적 형태로 진행 되어야만 한다.
- 다양한 부분으로 이루어짐
- 프로그램 코드, 텍스트 섹션 이라고 불림
- 프로그램 카운터와 프로세스 레지스터를 포함한 현재 진행 중인 활동
- 임시 데이터를 저장하는 스택
- 함수 매개변수, 복귀 주소, 지역 변수
- 전역 변수를 저장하는 데이터 섹션
- 실행 중 동적으로 할당되는 메모리 영역인
- 하나의 프로그램에서 여러 개의 프로세스를 만들 수 있다.
메모리에서의 프로세스
프로세스 상태
- 프로세스가 실행되면서 상태가 계속 변한다.
- new: 프로세스가 생성되는 중인 상태
- running: 명령어가 실행 중인 상태
- wailting(sleep): 프로세스가 어떤 사건이 일어나기를 기다리고 있는 상태
- ready와 비슷
- ready: 프로세스가 처리기가 할당되기를 기다리고 있는 상태
- terminated: 프로세스가 실행을 완료한 상태
프로세스 제어 블록 (PCB)
- 태스크 제어 블록(task control block)이라고도 불림)
- 프로세스의 상태, 프로그램 카운터, CPU레지스터, CPU스케줄링 정보, 메모리 관리 정보, 회계정보, I/O 상태 정보가 저장되어 있음.
스레드
- 하나의 프로세스가 여러개의 스레드로 구성될 수 있다
- 프로세스 마다 여러 개의 프로그램 카운터를 가지는 경우
- 여러 위치에서 동시에 실행시키기 위해서 복수의 스레드를 사용한다.
프로세스 스케줄링
- CPU 사용을 최대로 하는 것이 목표, 시간을 나누어 쓰기 위해 CPU에 프로세스를 빠르게 전환시킨다.
- 프로세스의 스케줄링에는 여러 종류의 큐가 존재한다.
- 잡 큐: 시스템의 모든 프로세스의 집합
- 준비 큐: 메인 메모리에 존재하고 실행을 기다리며 준비된 모든 프로세스의 집합
- 장치 큐: I/O 장치를 기다리고 있는 프로세스의 집합
- 큐잉 다이어 그램: 큐, 자원, 프로세스의 이동 흐름을 나타낸다.
스케줄러
- 단기 스케줄러(cpu 스케줄러): 어떤 프로세스에게 어떤 cpu를 사용할지 배정시키는 스케줄러
- 주로 cpu 할당
- 자주 발생
- 장기 스케줄러(잡 스케줄러): 어떤 프로세스를 시스템 안으로 가져올 것인가를 결정하는 스케줄러
- 다중프로그래밍의 정도를 결정한다.
- 상대적으로 덜 자주 발생
- 중기 스케줄러: 메모리에 적재된 프로세스를 제거하고(swap out) 추가하는 것(swap in)을 즉 swapping을 결정하는 스케줄러
- 다중프로그래밍 정도를 낮출 필요가 있을 때 사용
이동 시스템(스마트폰)에서의 다중태스킹
- ios 초기에는 하나의 프로세스만 실행이 가능했지만 요즘날에는 복수의 프로세스가 실행되는 것이 가능
- foreground 프로세스: 사용자 인터페이스에 의해 제어됨
- background 프로세스: 메모리에 적재되어 실행 중이지만 화면에는 보이지 않는다.
문맥 교환
- CPU가 다른 프로세스로 전환할 때, 시스템은 문맥 교환을 통하여 예전 프로세스의 상태를 저장하고 새 프로세스의 저장된 문맥을 적재해야 한다.
- 이때 걸리는 시간을 컨텍스트 스위칭 오버헤드(문맥교환)라고 한다.
- 이때 예전 프로세스의 상태는 PCB에 표현된다.
- 운영체제와 PCB가 복잡할수록 문맥 교환 시간은 더 길어진다.
프로세스에 대한 연산
- 프로세스 생성
- 부모 프로세스는 운영체제가 허용하는 범위 안에서 자식 프로세스를 필요한 만큼 생성이 가능하다.
- 프로세스는 탄생시 프로세스 식별자를 부여 받는다
- 주소 공간
- 자식은 부모 프로세스의 주소 공간을 복제한다.
- 자식은 그 공간에 프로그램을 적재한다.
- 부모와 자식의 자원 공유 옵션
- 부모와 자식은 모든 자원을 공유한다.
- 자식이 새롭게 자원을 확보하면 운영체제의 허락하에 부모가 자식의 자원을 공유하는 것이 가능하다.
- 자식과 부모는 운영체제가 허용하는 범위 안에서만 자원을 공유한다.
- 부모와 자식은 아무 자원도 공유하지 않는다.
- 부모와 자식은 모든 자원을 공유한다.
- 실행 옵션
- 부모는 자식이 종료될 때까지 기다린다.
- 부모와 자식은 병행하게 실행된다.
프로세스 종료
- wait(): 부모가 자식의 종료를 기다릴 필요가 있을 때 사용하는 시스템 콜
- 기다리고 있는 부모가 없는 프로세스를 좀비(zombie)라고 한다.
- wait를 호출하지 않고 부모가 종료된 프로세스를 고아(orphan)라고 한다.
프로세스 간 통신
- 시스템 내의 프로세스는 독립적이거나 협력적 일 수 있다.
- 협력적 프로세스가 필요한 이유:
- 정보 공유
- 계산 속도 향상
- 모듈성
- 편리함
- 협력적인 프로세스는 IPC(프로세스 간 통신)이 필요하다.
- IPC의 두 가지 모델
- 공유 메모리
- 두 프로세스 사이의 공유하는 메모리를 만들어 서로의 작업을 공유
- 상대적으로 속도가 빠름(단 멀티 코어나 멀티 프로세스 환경에서는 속도가 느려질 수 있음 Why? 메모리 일관성 때문에)
- 메시지 전달
- 메시지 큐에 저장된 정보를 쓰고 읽는 식으로 메시지 전달
- 상대적으로 속도가 느림
- 공유 메모리