[virtualization]4.processes intro

ROSI·2023년 6월 28일

OS는 프로세스를 작은 시간단위로 나누어 처리하는 시분할(time sharing)기법을 이용하여 각 사용자가 cpu자원을 독점하고 있다고 느끼게 만드는 'cpu 가상화'를 구현한다.

cpu가상화에 필요한 요소는 크게 두가지이다.

  • 메커니즘(mechanism)
    ex. context switching, time sharing
  • 정책(policy)
    ex. scheduling policy. 과거정보, 성능측정결과, 워크로드에 대한 지식(어떤 유형의 프로그램들이 실행되었는지)를 이용해서 실행가능한 프로그램 중 하나에 cpu를 할당한다.(kernel의 scheduler의 dispatcher가)

프로그램은 실행되는 동안 하드웨어에 대해 읽거나 쓰기작업을 한다. 그렇기 때문에 특정 순간의 프로세스 상태는 실행시점부터 그 순간까지 영향을 받은 하드웨어의 목록이다. 메모리, 레지스터, 디스크 접근 기록이 중요한 요소이다.

주소공간(address space):
프로세스가 메모리 내에서 사용하는 주소범위.
물리 메모리와 mapping된 프로세스 독립적인 가상화된 메모리이다.

프로그램 카운터:
instruction counter라고도 한다.
프로그램의 어느 명령어가 실행 중인지를 알려준다.

프레임 포인터:
함수 호출 시 생성되는 스택 프레임과 관련된 정보를 저장하는 레지스터이다.
주로 '스택 프레임의 시작 주소'를 가리킨다.
일반적으로 프레임 포인터는 스택 포인터와 동일한 값이거나, 스택 포인터보다 이전 위치를 가리킨다.

스택 포인터:
스택 메모리 영역에서 '현재 스택 프레임의 상단'을 가리키는 주소를 저장하는 레지스터이다. 스택 프레임의 데이터 push / pop작업을 관리한다.
스택 프레임 크기 조정에 사용된다.(함수 호출 시 새로운 스택 프레임의 상단 위치로 이동하거나 함수가 종료되면 이전 스택 프레임의 상단으로 이동(리턴주소))

현대 OS에서 지원하는 프로세스에 대한 API는
creat, destroy, wait, status, 각종 제어(일시 정지, 재개 등)
를 기본 기능으로 제공한다.

프로세스가 생성되는 과정은 다음과 같다.
코드와 static data를 메모리에 load한다.
스택과 힙을 할당 및 초기화한다.
입출력에 관련된 초기화 작업을 한다.(fd등)
entry point인 main함수의 상단으로 분기한다.

프로세스는 running, ready, block(sleep. 특정 이벤트가 발생할때까지 실행을 멈추고 대기하는 상태), unused(프로세스 생성중), zombie등의 state를 갖는다.


https://github.com/remzi-arpacidusseau/ostep-translations/tree/master/korean

profile
https://songdaegeun.github.io/ 으로 블로그이전 중입니다

0개의 댓글