Virtaulization: Processes
- Process: 실행 중인 프로그램
- 프로그램: 디스크 상에 존재, 실행을 위한 명령어와 정적 데이터의 묶음
- 프로그램을 운영체제가 실행
- 가상화
시분할 기법
: 원하는 수 만큼의 프로세스를 동시에 실행가능하게 함- CPU 공유, 각 프로세스의 성능은 낮아짐
공간분할(space sharing): 개체에게 공간을 분할, 디스크에서…
- OS에서 CPU 가상화를 잘 구현하기 위해 필요한 것
- 저수준 도구(메커니즘): 필요한 기능을 구현하는 방법이나 규칙
- ex) context switch
- 저수준 도구(메커니즘): 필요한 기능을 구현하는 방법이나 규칙
- 정책(policy)
- 어떤 결정을 내리기 위한 알고리즘
- ex) 스케줄링 정책
- 어떤 결정을 내리기 위한 알고리즘
프로세스의 개념
Process
: 실행 중인 프로그램의 개념- 특정 순간의 프로세스 표현: 실행되는 동안 접근했거나 영향을 받은 자원의 목록
- 프로세스의 구성요소
- 먼저 하드웨어 상태를 이해해야함
- 프로그램이 실행되는 동안 HW 상태를 읽거나 갱신하기 때문
- 먼저 하드웨어 상태를 이해해야함
- 중요한 HW 구성 요소 (프로세스를 구성하는 요소)
- 메모리
- 명령어, 데이터는 메모리에 저장
- 프로세스가 접근할 수 있는 메모리
- 레지스터
- 명령어들이 레지스터를 직접 읽거나 갱신
- 특별한 레지스터들
- 프로그램 카운터(Program Counter, PC) 또는 명령어 포인터(instruction pointer, IP)
- 스택 포인터(Stack Pointer), 프레임 포인터(Frame Pointer): 함수의 변수와 리턴 주소를 저장하는 스택을 관리할 때 사용하는 레지스터
- 영구 저장장치(persistent storage)
- 프로세스가 현재 열어 놓은 파일 목록을 가짐
- 메모리
팁: 정책과 구현의 분리(모듈성)…많은 OS에서 공통된 설계 패러다임: 고수준 정책을 저수준 기법으로부터 분리 기법: 시스템에 관한 어떻게? 정책: 어느것을? (어느 프로세스?) 기법과 정책을 분리하면 둘 중 하나를 변경할 때 기법의 변경을 고민하지 않아도 됨.
프로세스 API
모든 현대 운영체제에서 제공되는 API
- 생성(Create)
- 새로운 프로세스 (명령어로, 더블클릭 …)
- 제거(Destroy)
- 대기(Wait)
- 각종 제어(Miscellaneous Control)
- 일시정지, 다시시작
- 상태(Status)
- 프로세스 상태 정보
- 얼마동안 실행?, 어떤 상태?
- 프로세스 상태 정보
프로세스 생성
- 프로그램에서 프로세스로
- 프로그램(디스크, [코드, 정적데이터]) –> 탑재 –> 메모리 [코드, 정적데이터, 힙, 스택]
- 탑재: 디스크 상의 프로그램을 찾아 프로세스의 주소 공간으로 읽어들임
- 프로그램(디스크, [코드, 정적데이터]) –> 탑재 –> 메모리 [코드, 정적데이터, 힙, 스택]
- 첫 번째 작업
- 코드, 정적 데이터(초기값을 가지는 변수)를 메모리, 프로세스의 주소 공간에 로드하는 것
- 프로그램(SSD.. 실행 파일 포맷)
- 초기 운영체제: 프로그램 실행 전 코드와 데이터 모두 메모리 로드
- 현대 운영체제: 필요할 때 필요한 부분만 메모리에 탑재
- 페이징(paging) 과 스와핑(swapping)
- 코드, 정적 데이터(초기값을 가지는 변수)를 메모리, 프로세스의 주소 공간에 로드하는 것
- 두 번째 작업
- 일정량 메모리가 프로그램의 런타임 스택 용도로 할당되어야함
- C언어
- C프로그램은 지역 변수, 함수 인자, 리턴 주소 등을 저장하기 위해 스택을 사용
- main 함수의 인자인 argc, argv 벡터를 사용하여 스택을 초기화함
- 운영체제는 프로그램의 힙(heap)을 위한 메모리 영역을 할당
- 힙: 연결 리스트, 해시 테이블, 트리 등 크기가 가변적인 자료구조를 위해 사용
- 운영체제는 입출력 관련 초기화 작업을 수행함
- Unix 시스템에서 각 프로세스는 STDIN, STDOUT, STDERR 장치에 해당하는 3개의 파일 디스크립터를 가짐
- 디스크립터 —–> 프로그램이 입력을 읽고, 출력하는 작업 가능 (영속성)
- Unix 시스템에서 각 프로세스는 STDIN, STDOUT, STDERR 장치에 해당하는 3개의 파일 디스크립터를 가짐
- 요약
- 코드, 정적데이터 메모리 탑재 -> 스택과 힙을 생성 및 초기화 -> 입출력 설정 -> 프로그램 실행 준비 끝
- -> 프로그램 시작 지점(entry point) 시작하는 작업
- -> OS는 CPU를 새로 생성된 프로세스에게 넘기고, 프로그램 실행
- 코드, 정적데이터 메모리 탑재 -> 스택과 힙을 생성 및 초기화 -> 입출력 설정 -> 프로그램 실행 준비 끝
프로세스 상태
- 프로세스의 상태(state)
- 상태 전이
- 실행(Running): 프로세스가 프로세서에서 실행 중 (명령어 실행 중)
- 준비(Ready)
- 대기(Blocked): 프로세스가 다른 사건을 기다리는 동안, 프로세스의 수행을 중단시키는 연산 (입출력 요청)
- 상태 전이
프로세스는 상태를 OS의 정책에 따라 이동(스케줄링 정책)
- 그 외 상태들(시스템에 따라 다름)
- 초기 상태: 프로세스가 생성되는 동안
- 최종 or 좀비 상태: 프로세스 종료 후 메모리에 남아 있는 상태
자료 구조
OS는 다양한 정보를 유지하기 위한 자료구조를 가지고 있음
- 프로세스 리스트(process list)
- 프로세스 상태를 파악하기 위해 준비 상태의 프로세스들을 위한 자료구조
- 레지스터 문맥(register context)
- 프로세스가 중단되었을 대 해당 프로세스의 레지스터값들을 저장함.
- 이 레지스터값들을 복원하여 OS는 프로세스 실행을 재개함
- 관련 기법: Context Switch
자료구조- 프로세스리스트: 시스템에서 실행 중인 프로그램을 관리한다. 프로세스 제어 블럭(PCB): 프로세스의 관리를 위한 정보를 저장하는 자료구조
핵심 질문
- CPU가 여러 개 존재한다는 환상을 어떻게 제공하는가?
- 가상화를 통해
요약
- 프로세스
- 실행중인 프로그램
숙제
todo