Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- KT포트포워딩
- 이것이자바다9장
- 합성곱연산
- 운영체제
- 백준9012
- 코테
- 백준10828
- 컴퓨터비전
- 코드트리
- 2019카카오코테
- 웹개발기초
- 윤곽선검출
- 확인문제
- BOJ
- java
- 백준
- 딥러닝
- 백준온라인저지
- 코딩테스트실력진단
- 백준괄호
- 백준평범한배낭
- 가운데를말해요
- 스파르타코딩클럽
- 카카오코테
- BOJ1655
- 이것이자바다확인문제
- 백준가운데를말해요
- 냅색알고리즘
- 이것이자바다
- 백준스택
Archives
- Today
- Total
코딩하는 락커
03. 프로세스의 이해 본문
3.1 프로세스 개념
프로세스
- 실행중인 프로그램
- CPU의 작업 단위
- CPU, 메모리를 사용할 수 있어야 하며 File, I/O Device 등의 리소스를 사용할 수 있어야함
- 실행 파일이 메모리에 적재될 때 프로그램은 프로세스가 됨
- 실행 파일 메모리 적재 방법: 아이콘 더블클릭 / 명령어 라인상에서 파일 이름 입력
- 프로세스의 메모리 배치는 여러 섹션으로 구분되어 있음
- 텍스트 섹션: 실행 코드
- 데이터 섹션: 전역 변수
- 힙 섹션: 프로그램 실행 중에 동적으로 할당되는 메모리 (ex. malloc)
- 스택 섹션: 함수를 호출할 때 임시 데이터 저장장소 (ex. 함수 매개변수, 복귀주소 및 지역 변수)
- C 프로그램의 메모리 적재
- 텍스트 섹션: a.out (소스 실행파일)
- 데이터 섹션
- initialized data: y
- uninitialized data: x
- 힙 섹션: malloc
- 스택 섹션: values, i
프로세스 상태
- 위 그림은 프로세스의 상태를 나타내는 해당하는 상태 다이어그램
- new: 프로세스가 생성중인 상태
- running: 명령어가 실행되고 있는 상태. (CPU를 점유해서 프로세스의 명령어가 실행하고 있는 상태)
- waiting: 프로세스가 어떤 이벤트(ex. I/O event)가 일어나기를 기다리고 있는 상태
- reday: 프로세스가 처리기에 할당되기를 기다리는 상태
- termindated: 프로세스 실행이 종료된 상태
프로세스 제어 블록
- 각 프로세스는 운영체제에서 프로세스 제어블록(PCB, process control block, 태스크 제어 블록TCB라고도 불림)에 의해 표현됨
- 위 그림은 PCB를 나타냄
- PCB는 특정 프로세스와 연관된 여러 정보를 수록하며 다음과 같은 것을 포함함
- 프로세스 상태
- 프로그램 카운터: 이 프로세스가 다음에 실행할 명령어의 주소를 가리킴
- CPU 레지스터들
- 컴퓨터 구조에 따라 다양한 수와 유형을 가짐
- 나중에 프로세스가 다시 스케줄 될 때 계속 올바르게 실행하기 위하여 인터럽트 발생 시 저장됨
- CPU 스케줄링 정보
- 메모리 관리 정보
- 회계 정보
- 입출력 상태 정보
스레드
- 현재까지의 프로세스 모델은 모두 프로세스가 단일 실행 스레드를 실행하는 프로그램임을 암시함
- 단일 실행 스레드: 프로세스가 한 번에 한 가지 일만 실행하도록 허용함
- 현대 운영체제는 한 프로세스가 다수의 실행 스레드를 가지는 병렬 스레드를 허용함.
3.2 프로세스 스케줄링
- 다중 프로그래밍의 목적: CPU 이용을 최대화하기 위하여 항상 어떤 프로세스가 실행되도록 하는 것
- 시분할의 목적: 각 프로그램이 실행되는 동안 사용자가 상호 작용할 수 있도록 프로세스들 사이에 CPU코어를 번번하게 교체하는 것
- 이 목적들을 달생하기 위해 프로세스 스케쥴러는 코어에서 실행 가능한 여러 프로세스 중 하나의 프로세스를 선택함
스케쥴링 큐
- 레디큐ready queue
- 프로세스가 시스템에 들어가면 레디큐에 들어가서 준비 상태가 되어 CPU 코어에서 실행되기를 기다림
- 일반적으로 연결 리스트로 저장됨
- 웨이트큐wait queue
- 프로세스가 디스크와 같은 장치에 I/O 요청을 한다고 할 때 장치는 프로세스보다 느리가 진행되므로 프로세스는 I/O가 사용 가능할 때 까지 기다려야함
- 이 때 I/O 완료와 같은 특정 이벤트가 발생하기를 기다리는 프로세스가 들어가는 큐
- 위 그림은 큐잉 다이어그램을 나타냄
- 새 프로세스가 처음 준비큐에 놓임
- 실행을 위해 선택되거나 디스패치 될 때 까지 기다림
- CPU 코어가 할당되고 실행 상태가 되면 여러 이벤트가 발생할 수 있음
Context Switch
- 인터럽트는 운영체제가 CPU 코어를 현재 작업에서 뺏어 내어 커널 루틴을 실행할 수 있도록 함
- 인터럽트가 발생하면 시스템은 인터럽트 처리가 끝난 후에 Context를 복구할 수 있도록 현재 실행중인 프로세스의 현재 Context를 저장해야 함
- 이때 Context는 PCB로 표현됨
- Context Switch
- CPU의 현재 상태를 저장하는 작업(state save)을 수행하고 나중에 연산을 재개하기 위해 복구 작업(state restore)을 수행함
- 인터럽트가 일어났을 때 커널은 과거 프로세스의 Context를 PCB에 저장하고, 실행이 스케쥴된 새로운 프로세스의 저장된 Context를 복구함
- Context Swtich 시간은 순수한 오버헤드임
3.3 프로세스에 대한 연산
- 대부분 시스템 내의 프로세스들은 병행 실행하고 있으며 반드시 동적으로 생성되고 제거되어야
- 운영체제는 프로세스 생성 및 종료를 위한 기법을 제공함
프로세스 생성
- 부모 프로세스
- 새로운 프로세스를 생성하는 프로세스
- 자식 프로세스
- 새로운 프로세스
- 새로운 프로세스들은 각각 다시 다른 프로세스들을 생성할 수 있으며, 그 결과 프로세스의 트리를 형성함
- 프로세스는 프로세스 식별자pid를 사용하여 프로세스를 구분하며 pid는 고유한 값을 가짐
- systemd 프로세스
- 언제나 pid가 1인 프로세스
- 모든 사용자 프로세스의 루트 부모 프로세스 역할 수행
- 시스템이 부트될 때 생성되는 첫 번째 사용자 프로세스
- 시스템이 부팅되면 systemd 프로세스는 다양한 사용자 프로세스를 생성함
- logind 프로세스
- 시스템에 직접 로그인하는 클라이언트를 관리하는 책임을 지는 프로세스
- UNIX와 Linux 시스템에서는 ps 명령어를 이용하여 프로세스들의 목록을 얻을 수 있음 (ex. ps - el, 현재 시스템에 활성화 되어 있는 모든 프로세스의 정보를 나열해줌)
- 프로세스가 새로운 프로세스를 생성할 때 두 프로세스를 실행하는 2가지 방법
- 부모는 자식과 병행하게 실행을 계속함
- 부모는 일부 또는 모든 자식이 실행을 종료할 때 까지 기다림
- 프로세스가 새로운 프로세스를 생성할 때 주소 공간 측면의 2가지 가능성
- 자식 프로세스는 부모 프로세스의 복사본이 되는 경우 (자식 프로세스가 부모 프로세스와 똑같은 프로그램과 데이터르 가지며 자식 프로세스가 별도의 메모리 영역을 갖지 않고 PCB만 교체되는 경우)
- 자식 프로세스가 자신에게 적재될 새로운 프로그램을 가지고 있는 경우
- 새로운 프로세스는 fork() 시스템 콜로 생성됨
- 위 그림은 동일한 프로그램의 복사본을 실행하는 두 개의 프로세스를 갖는 C 프로그램 소스임
- 자식 프로세스의 pid= 0, 부모 프로세스의 pid>0
- 부모 프로세스는 wait() 시스템 콜로 자식 프로세스가 끝나기를 기다림
- 자식 프로세스가 끝나면 부모 프로세스는 wait()호출을 재개하여 exit() 시스템 콜을 사용하여 끝냄
프로세스 종료
- 프로세스가 exit() 시스템 콜을 사용하여 운영체제에 자신의 삭제를 요청하면 종료됨
- 이 시점에서 프로세스는 자신을 기다리고 있는 부모 프로세스 wait 시스템 콜을 통해 상태값을 반환하고, 물리 메모리와 가상 메모리, 열린 파일, 입출력 버퍼를 포함한 프로세스의 모든 자원이 할당 해제되고 운영체제로 반납됨
- 고아 프로세스orphan process
- 자식 프로세스는 실행중이며, 부모 프로세스가 wait()을 호출하는 대신 종료한 상황의 자식 프로세스
- 좀비 프로세스zombie process
- 자식 프로세스는 종료되었으나 부모 프로세스가 아직 wait() 호출을 하지 않은 상황의 자식 프로세스
'📀 운영체제' 카테고리의 다른 글
05. 프로세스간 통신: Chapter 3. Processes (0) | 2022.05.22 |
---|---|
04. 프로세스의 생성: Chapter 3. Processes (Part 2) (0) | 2022.05.16 |
02. 운영체제의 개념과 구조 (0) | 2022.05.09 |
03. CPU Scheduling (0) | 2021.11.04 |
02. Processes (0) | 2021.11.04 |
Comments