일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 파싱
- 클래스
- Linear Algebra
- Agile
- 정보검색
- 가상메모리
- 컴파일러
- 데이터분석
- 소프트웨어공학
- 컴파일
- 데이터베이스
- 벡터
- 스케줄러
- NLP
- OS
- 객체지향설계
- C언어
- css
- 파싱테이블
- React
- 웹소프트웨어
- DB
- 언어모델
- 836
- 오픈소스웹소프트웨어
- 운영체제
- 랩실일기
- 프로세스
- 애자일
- 자연어처리
Archives
- Today
- Total
observe_db
[OS] 3. 프로세스(Process)(1) 본문
3/20
프로세스(Process): 메모리에 적재되어있는 프로그램
어떻게 빠르고/공평하고/효율적으로 실행할 수 있을까.(운영체제의 일)
Part 1.
Process
- 실행중인 프로그램
- 자신의 주소공간(address space) 보유
- code 영역: 프로세서가 실행하는 프로그램 코드 저장
- data 영역: 전역 변수 저장
- heap 영역: 동적 메모리 할당 영역(malloc(), calloc())[1]
- stack 영역: 임시 데이터(함수의 매개변수/반환주소/지역변수 등)
- Linux 프로세스에서는 가상 주소 공간(virtual address space)이 있음.
Process life cycle(생명 주기)
- 프로세스는 이산적인 상태간 전이(transition)
- running(실행) 상태: 프로세서에서 명령어 실행 중
- ready(준비) 상태: 프로세서의 할당 대기 중
- waiting(blocked)(대기) 상태: 특정 event(I/O의 완료, signal 수신 등) 대기
- new (생성) 상태: 프로세스 생성 중
- terminated(종료) 상태: 실행 종료
프로세스 상태
- dispatch(디스패치): ready list에 있는 첫번째 프로세스에 프로세서를 할당.
- 운영체제는 일정시간(time interval, time quantum)을 프로세스에 사용하도록 허용
- 시간간격 타이머(interval timer)의 인터럽트를 이용하여 스케줄러(scheduler) 실행 --시분할처리
프로세스 제어 블록(Process Control Block, PCB)
- OS가 프로세스 관리를 위해 데이터를 보관하는 자료구조
- 프로세스 식별 변호(PID)
- 프로세스 상태(state)
- 프로그램 카운터(PC)
- CPU 레지스터
- CPU 스케줄링 정보
- 부모 프로세스 포인터
- 자식 프로세스 포인터
- 메모리 관리 정보
- I/O 상태 정보
- 사용 통계 정보
프로세스 테이블(process table)
- PCB의 포인터를 관리하는 테이블
- OS가 시스템별/사용자별로 관리
- 신속한 PCB 접근 지원
- 프로세스 종료 시 프로세스 테이블에서 해당 프로세스 제거 후 자원 반납
Part 2.
프로세스 스케줄러(process scheduler)
- CPU에서 실행할 프로세스를 선택
- 여러 프로세스가 실행가능한(ready) 상태이면 우선순위 고려
- 여러 큐(queue) 구조 활용
- job queue(작업 대기열): 시스템의 모든 프로세스 관리
- ready queue(준비 대기열): 실행 가능한 준빕상태의 프로세스 관리
- device queue(장치 대기열): I/O 장치의 작업처리 대기중인 프로세스 관리
- 장기 스케줄러(long-term scheduler, job scheduler)
- 준비 대기열(ready queue)에 집어넣을 프로세스 선택
- Unix 및 Windows는 장기 스케줄러 없음
- 단기 스케줄러(short-term scheduler, CPU scheduler)
- CPU에서 바로 다음에 실행할 프로세스 선택
동작 방식
프로세스 관련 서비스
- 프로세스 생성(create)
- 프로세스 종료(destroy)
- 프로세스 일시중지(suspend)
- 프로세스 재시작(resume)
- 프로세스 우선순위 변경(priority)
- 프로세스 대기(block)
- 프로세스 깨우기(wake up)
- 프로세스 디스패치(dispatch)
- 프로세스 간 통신(Inter-process communication, IPC)
프로세스 선점(preemption)
- 실행중인 프로세스가 CPU 사용권한을 상실하게 되는 것
- 실행중인 사용자 프로세스가 커널에 제어권을 양보하는 상황
- 인터럽트, 트랩, 예외사항 발생 시
- 디바이스 인터럽트(device interrupt), 시스템콜(system call), 페이지 폴트(page fault), 불법 명령어(illegal instruction)
- 인터럽트 상황 처리 후 우선순위 고려한 스케줄링
- 인터럽트, 트랩, 예외사항 발생 시
- 주기적 타이머 인터럽트: 프로세스에 할당된 시간이 경과하면 스케줄러가 호출되어 다른 프로세스에 CPU 할당
프로세스 생성
- 처음부터 새로 생성(from scrath)
- 프로그램 코드와 데이터를 메모리에 적재
- 새로운 PCB 생성 및 초기화
- 프로세스를 준비대기열(ready queue)에 추가
- 복제 생성(cloning)
- 현재 프로세스를 중지하고 상태 저장
- PCB 복사하여 새로운 PCB 생성
- 새로운 PCB를 준비대기열(ready queue)에 추가
- 기존 프로세스를 부모(parent), 새로운 프로세스는 자식(child) 관계 설정
- fork() , exec()함수 이용 등.
- (fork())
- fork를 호출한 프로세스의 복사본 생성
- 새로운 PCB 생성
- 복사본의 주소공간을 PCB가 가르키도록 초기화
- 부모 프로세스의 자원을 가리키도록 설정
- 부모는 생성된 자식 프로세스 PID를, 자식은 0 반환.(유일한 차이점)
- (exec())
- 현재 프로세스 정지
- prog에 해당하는 프로그램을 현 프로세스의 주소 공간에 적재
- 하드웨어 문맥(context) 초기화
- 새로운 프로그램에 대한 명령행 파라미터 argv의 초기화
- 부모 프로세스의 주소공간의 내용 복사
- 필요시 복사된 주소 공간에 자식 프로세스의 프로그램 복사
- 프로세스 트리(tree)
- 부모: 새로운 프로세스를 생성한 프로세스
- 자식: 생성된 프로세스
- 트리 형태의 구조 생성
- 부모 종료 시 자식 프로세스 처리(설계에 따라 다름)
- 부모 자식 프로세스의 관계
- 자원 공유(flag로 설정 가능)
- 서로 모든 자원 공유
- 일부만 공유
- 서로 별개 자원
- 실행 형태
- 병행 실행
- 부모 프로세스가 자식 프로세스가 종료할 때까지 대기
- 자원 공유(flag로 설정 가능)
[1] 여담으로 자료구조로의 heap은 배열인데 이진트리로 해석가능한 것. min heap/max heap 등.
'학교 공부 > 운영체제(OS)(3-1)' 카테고리의 다른 글
[OS] 4. Thread (0) | 2023.04.05 |
---|---|
[OS] 3. 프로세스(Process)(2) (0) | 2023.04.05 |
[OS] 2. 하드웨어와 소프트웨어(3) (0) | 2023.03.21 |
[OS] 2. 하드웨어 및 소프트웨어(2) (0) | 2023.03.20 |
[OS] 2. 하드웨어 및 소프트웨어(1) (0) | 2023.03.15 |
Comments