CPU가 여러 개 존재한다는 환상을 어떻게 제공하는가?
CPU 가상화의 기본 원리
시분할
지원 방안 : 정책 + 메커니즘
프로세스란?
프로그램 vs 프로세스
프로그램 : 디스크에 저장된 정적인 코드
프로세스 : 메모리에서 실행 중인 동적인 실행 단위
프로세스 구성 요소
CPU 레지스터
PC(program counter), SP(stack pointer), FP(Frame pointer) 등
주소 공간(메모리)
text : 프로그램 코드
data : 전역 변수
stack : 지역 변수 및 함수 매개변수
heap : 동적 메모리
I/O 정보
파일 디스크립터, 열려 있는 파일 등
프로세스 관련 API(Process API)
기능
설명
create
새로운 프로세스 생성
destroy
프로세스 제거
wait
자식 프로세스 종료 대기
control
일시 중지/재게
status
프로세스 정보 조회
프로세스 생성 절차
프로그램 코드 메모리 적재
실행 파일을 읽어 프로세스 주소 공간에 올림
Lazy loading 사용 가능
게으른 적재
한꺼번에 모든 코드나 데이터를 메모리로 읽어 오지 않고 필요할 때 가져 온다
실행 스택 생성
함수 호출 시 지역변수, 인자 저장
힙 영역 할당(동적 할당)
동적 메모리 관리 (malloc, new)
입출력 초기화
표준 입출력 연결(stdin, stdout, stderr → file descriptor 0,1,2)
시작점(main 함수)로 분기
프로세스 기본 상태
상태
설명
running
CPU를 사용 중인 상태
ready
실행 준비는 되었지만 CPU를 못 받은 상태(Block에서 I/O가 끝나면 ready로 전환)
blocked
입출력 등 외부 이벤트를 기다리는 상태(ex) I/O 작업 수행중)
상태 전이 다이어그램
running → blocked : I/O 발생
blocked → ready : 이벤트 발생