# 프로세스
- OS가 사용자에게 제공하는 추상화 중 하나
- 정의: 실행중인 프로그램 [루틴] (동시에 둘 이상의 프로그램 — ID로 식별)
- 구성 요소
- CPU context (registers)
- Program counter — 명령어 주소 레지스터 / Stack pointer — 스택 위치를 가리키는 레지스터
- OS resources (address space, open files, etc)
- 다른 정보 (PID, 상태, 소유자 등
# 가상화
- 제한적인 물리적 CPU로, OS는 어떻게 제한없는 CPU 공급을 제공할 수 있을까?
- 물리적 CPU를
시분할 방식
을 통해 프로세스 처리 (ex: 자바 Thread)
# 프로세스 API
- OS가 Application에게 제공하는 Interface
- Create (생성)
- 사용자가 실행할 새 프로세스를 만든다. - Destroy (종료)
- 완료에 의한 종료가 아닌 강제 종료 - Wait (대기)
- 다른 프로세스가 중단될때까지 대기 - Miscellaneous Control
- “일시 중단 후 재개” 등의 기타 제어 - Status (상태)
- 상태 정보를 얻을 수 있다.
## Process Creation
- 프로그램 코드와 정적 데이터를
memory
의 프로세스의 주소 공간에 로드
- 프로그램은 처음에 실행 가능한 형식으로 디스크에 상주
- OS가 lazy loading: 프로그램 실행 시 코드 또는 데이터 로드 - 프로그램의 런타임 스택을 할당
- 주로 local variables, function parameters, return address에 스택을 사용
- 인수와 함께 스택 초기화 가능 -> main()함수의 argc 및 argv 배열 - 프로그램의
heap
영역 생성
- 명시적으로 요청된 동적 할당 데이터에 사용
- malloc()를call
해 공간 할당 후, free()를call
해 명시적으로 해제
(GC를 생각해보면 될 것 같다…) - 다른 초기화 작업 수행
- 입출력(I/O) 설정
- 각 프로세스의open file descriptots
: 표준입력, 출력, 오류 main()
을 실행 — 진입점에서 실행되는 프로그램
- OS가 CPU에 대한 제어를 새로 만든 프로세스로 이전
## Process States
- Running
- 프로세스 실행 중 - Ready
- 프로세스가 실행될 준비가 되었지만, 실행하지 않고있는 상태 (메모리 적재) - Blocked
- 특정 이벤트가 발생할 때까지, 대기하는 상태 (waiting)
## Data Structures
- 프로세스 목록
- 시스템의 모든 프로세스에 대한 정보가 포함
- 항목은프로세스 제어 블록 (PCB)
이라고도하며, 특정 프로세스에 대한 정보를 포함하는 구조
-프로세스 상태 관리
와문맥교환(Context Switching)
을 위해 피료 - The xv6 kernel Proc Structure
- PCB 저장 정보
- PID: 프로세스의 고유 번호
- 상태: 준비, 대기, 실행 등의 상태
- 포인터: 다음 실행될 프로세스의 포인터
- Register save area: 레지스터 관련 정보
- Priority: 스케줄링 및 프로세스 우선순위
- 할당된 자원 정보
- Account: CPU 사용시간, 실제 사용된 시간
- 입출력 상태 정보