-
[CS 스터디] OS - ProcessCS📟 2022. 10. 22. 21:49
프로세스
프로세스의 실행
어드레스 스페이스에는 코드 데이터 스택이 있다
- 주소 공간
- 코드 영역
- 프로그램의 기계어들
- 데이터 영역
- 전역 변수 같은 데이터
- 스택
- 함수들을 저장
- 크기에 제한이 있다.
- 힙
- 스택보다 크다
- 필요할 때마다 사용
- 포인터로 사용해야 하기 때문에 느림
- 코드 영역
커널 주소 공간의 내용
- 코드 영역
- 시스템 코드, 인터럽트 처리 코드와 자원 관리를 위한 코드가 존재
- 데이터
- PCB(Process Control Block)
- 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
- 다음의 구성 요소를 가진다(구조체로 유지)
- OS가 관리상 사용하는 정보
- Process state, Process ID
- scheduling infomationm priority
- CPU 수행 관련 하드웨어 값
- Program counter, register
- register를 저장해놔야 이용권이 돌아왔을 때 하던 작업을 다시 진행할 수 있음
- Program counter, register
- 메모리 관련
- Code, data, stack의 위치 정보
- 파일 관련
- Open file, descriptions
- PCB(Process Control Block)
- 스택
- 각 프로세스마다 별도로 관리
함수
- 사용자 정의 함수
- 자신의 프로그램에서 정의한 함수
- 라이브러리 함수
- 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수
- 커널 함수
- 운영체제 프로그램의 함수
- 예 : 시스템 콜
프로그램의 흐름
프로그램의 주소 공간에서 유저 모드로 사용되다가 시스템 콜 등이 일어나면 운영체제한테 제어권을 넘기고
커널 모드로 돌입하는 과정을 반복
프로세스의 개념
- 프로세스의 문맥
- CPU 수행 상태를 나타내는 하드웨어 문맥
- Program Counter
- 각종 register
- 프로세스의 주소 공간
- 코드, 데이터, 스택
- 현재 상태를 알 수 있다(진행 중인 함수 등)
- 프로세스 관련 커널 자료구조
- PCB
- CPU 사용량, 메모리 사용량 등을 저장
- Kenel Stack
- 프로세스마다 다른 스택을 사용하기 때문에 현재 상태를 알 수 있음
- PCB
프로세스 상태
- CPU 사용 중 - Running
- Queue에서 대기 중 - Ready
- CPU를 줘도 사용할 수 없는 상태 - Blcoked
- 예 : I/O 작업, 디스크에서 읽어 오는 중, 공유 데이터 대기 중
- 외부요인으로 정지 - Suspended
- 생성중
- 종료 중
- 공유 데이터
- 여러 프로세스가 데이터를 사용하는 데이터
프로세스 상태도
문맥 교환(Context Switch)
- CPU가 다른 프로세스로 넘어가는 것
- 시스템 콜이나 인터럽트가 일어난 다고 모두 문맥 교환은 아님
- 하나의 프로세스에서 다른 프로세스로 CPU가 넘어가야 문맥 교환임
- 문맥 교환 시에는 오버헤드가 큼 (예 : cache memory flush)
스케줄링을 위한 큐
- Job Queue
- 현재 시스템 내에 있는 모든 프로세스의 집합
- Ready Queue
- 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
- Device Queue
- I/O device의 처리를 기다리는 프로세스의 집합
- 프로세스들은 각 큐들을 오가며 수행됨
스케줄러
- Long-term scheduler(장기 스케줄러 or job scheduler)
- 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
- 프로세스에 메모리를 주는 문제
- new - admintted - ready로 올 때 admintted를 해줌
- 보통은 없음
- short-term scheduler(단기 스케줄러 or CPU scheduler)
- 어떤 프로세스를 다음에 running 할지 결정
- 프로세스에 CPU를 주는 문제
- 빠름
- Medium-term scheduler
- 메모리를 뺏는 문제
- 성능이 저하되면 프로세스를 골라서 메모리에서 쫓아냄
- 프로세스 상태가 Suspended로 바뀜
프로세스 상태도
프로세스의 상태는 운영체제가 프로세스를 관리하기 위한 상태이므로 운영체제는 상태가 없음
Thread
- 동일한 프로세스 안에서 스레드를 만들어서 사용하면 Context Switch를 하지 않아도 되니 오버헤드가 줄어든다.
- 하나의 스레드가 running 상태일 때 다른 스레드가 일을 처리하게 하면 조금 더 빠른 처리 가능
- 구성
- program counter
- register set
- stack space
- 같은 프로세스 안에 스레드끼리 공유
- code section
- data section
- OS resource
- 장점
- 응답성이 빠름
- 자원을 공유
- Soaris의 경우 스레드를 쓰면 만드는 것은 30배, 스위칭하는 것은 5배가 빠름
- 병렬성을 추구 가능
- 병렬로 처리하면 속도가 빠름
- 구현
- 커널이 스레드를 알게 구현
- 운영체제가 스레드를 모름
- I/O가 일어나면 프로세스 내부에서 비동기식으로 CPU를 받아서 일을 처리
프로세스 관리
- 프로세스 생성
- 부모 프로세스가 자식 프로세스를 생성(복제 생성)
- 프로세스의 트리 형성
- 프로세스는 자원을 필요로 함
- 운영체제로부터 받음
- 부모와 공유
- 자원의 공유
- 부모와 자식이 모든 자원을 공유
- 일부만 공유
- 전형 공유하지 않음
- 자원의 공유
- 수행
- 부모와 자식은 공존하며 수행
- 주소 공간
- 부모의 공간을 복사
- 자식은 그 공간에 새로운 프로그램을 올림
- 유닉스의 예
- fork()
- 시스템 콜이 새로운 프로세스를 생성
- pid가 0이면 자식 pid가 0보다 크면 부모
- exec()
- 덮어쓰기
- wait()
- blocked 상태로 전환
- 자식이 종료될 때 부모가 기다려야 하면 wait()을 사용
- exit()
- 프로세스를 종료
- 자발적 종료
- 비자발적 종료
- 자식이 부모에게 output data를 보냄
- 자원들을 운영체제에게 반납
- 프로세스를 종료
- abort
- 부모가 강제로 종료
- 자식이 할당 자원을 넘어섬
- 더 이상 태스크가 필요치 않음
- 부모가 종료됨
- 아래의 자식들은 다 종료시킴
- 부모가 강제로 종료
- fork()
프로세스 간 협력
- 프로세스는 기본적으로 독립적
- 독립적 프로세스
- 프로세스는 각자의 주소 공간을 가비고 수행되므로 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못함
- 독립적 프로세스
- 경우에 따라서 협력을 해야하는 경우도 존재
- 협력 프로세스
- 프로세스 협력 메커니즘으로 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음
- 프로세스 간 협력 매커니즘(IPC: Interprocess Communication)
- 메시지를 전달하는 방법
- message passing
- 커널을 통해 메시지 전달
- 운영체제를 매개로 메세지 전달
- Direct Communication
- 통신하려는 프로세스의 이름을 명시적으로 표시(네가 받아라~)
- Indirect Communication
- mailbox or port를 통해서 메시지 간접 전달(어디로 가는지는 모르겠지만 필요한 사람 받아라~)
- Direct Communication
- message passing
- 메시지를 전달하는 방법
- 주소 공간 공유
- shared memory
- 서로 다른 프로세스 간에도 일부 주소 공간을 공유
- 원칙적으로는 자신의 코드 공간만 써서 알 수 없지만 공유할 메모리 공간을 정해서 공유하게 된다.
- 서로 신뢰가 가능한 프로세스일때 사용하는 게 좋다.
- thread
- 스레드는 사실상 하나의 프로세스이므로 프로세스 간 협력으로 보기는 어렵다.
- 스레드 간에 주소 공간을 공유해서 협력가능
- 협력이 조금 더 수월
- 프로세스 간 협력 매커니즘(IPC: Interprocess Communication)
'CS📟' 카테고리의 다른 글
CS 스터디 - 운영체제 : 병행제어 I (0) 2022.11.04 [CS] 운영체제 - CPU 스케줄링 (0) 2022.11.03 CS 스터디 - 컴퓨터 시스템의 구조 (0) 2022.10.14 [CS 스터디] 운영체제 개요 (1) 2022.10.07 [TCP/IP] CH 6 보안 (2) 2022.09.17 - 주소 공간