[OS] 2. Processes
카테고리: OS
태그: 운영체제
CPU Virtualization
CPU 가상화Virtualization를 위해선 도구, 지능이 필요하다.
가상화 : 각 Process에게 CPU가 하나씩 존재하는 것처럼 하는 것이다.
Process : memory에 있는 어떤 프로그램을 실제 실행하는 것이다.
도구(매커니즘) → context changing
지능(알고리즘) → scheduling policy
Multiple processes 인 경우
사용할 수 있는 CPU가 한정적이기 때문에 CPU 가상화를 통해 각각이 할당받은 것 처럼 만든다.
Virtualizing the CPU
Time sharing of the CPU
하나의 process에 어느정도 쓰고 다른 process에게 할당할건지 조절한다. OS code 가 interleaving control을 하는데 이것을 통해 CPU 이동 관리를 한다.
Time Quantum 길이
너무 짧은 경우 : 고유의 CPU가 할당된 것 처럼 느끼긴 하지만 OS의 overhead가 커지게 된다.
너무 긴 경우 : 일이 동시에 처리된다는 느낌이 아니다.
⇒ 적절한 Time Quantum 값을 기준으로 time sharing 하는 것이 CPU 가상화에서 중요한 점이다.
A Process
process : 실행중인 프로그램
program : 원래 디스크의 저장장치에 가만히 있는 상태
디스크에서 program을 불러와서 실행시키면 process가 된다.
- Memory(address space)
- code(Text)
- Data
- Stack : 함수, 변수 저장
- Heap : 메모리 동적할당
- Register
- Program counter
- Stack pointer
프로세스의 경우에 따라 더 많은 것이 필요할 수도 있다.
Process API
process를 활용하기 위한 API는 다음과 같은데 어떠한 OS에서도 동작이 가능하다
- Create : 프로그램 실행시킬 새로운 프로세스를 만든다.
- Destroy : 실행중인 Process를 중단시킨다.
- Wait : Process의 실행이 멈추는것을 기다린다.
- Miscellaneous Control : 프로세스를 중단시키고 재개시키는 방법
- Status : 프로세스의 상태 정보를 받는다.
Process Creation
- 메모리로 프로그램 코드를 가져온다, 그리고 프로세스의 주소 공간으로 넣는다.
- 프로그램은 처음에 실행 가능한 형태로 디스크에 저장되어 있다
- OS는 프로그램 실행을 하면서 필요할 때 필요한 부분을 불러온다
코드나 데이터의 일부만 로딩을 하고 그 후에는 필요할때 마다 가져온다.
-
Stack을 할당한다.
- 스택은 지역 변수나, 함수 파라미터, 리턴 주소등에 사용한다.
- 변수들의 초기화도 진행한다.
-
프로그램의 Heap 영역 생성
- Heap : 동적으로 할당된 데이터를 사용하기 위해 사용된다.
- malloc()을 통해 할당하고 free()를 통해 해제한다.
dynamically : 동적 : 실행 도중에
statically : 정적 : 컴파일 할 때
- OS는 초기화 작업을 한다.
- 입출력과 관련된 setup
- 각각의 프로세스는 디폴트 파일 디스크립터를 오픈한다.
- standard input 0, output 1 and error 2
- 입출력과 관련된 setup
- 프로그램 실제 실행 주로 main()안에 서술되어있다.
- OS는 CPU가 새롭게 생성된 프로세스에 할당할 수 있게 조정한다.
Process States
프로세스는 3가지 중 한 상태일 수 있다.
- Running
- 프로세서에서 프로세스가 실행중이다.
- Ready
- 아직 할당 받은 상태는 아니고 대기중인 상태
- Blocked == waiting == sleep
- 특정 연산에 의해 이 상태에 도달한다.
- 입출력을 할때 CPU는 사용되지 않기 때문에 Block이 된다. 그럴 때 다른 프로세스가 CPU 사용한다.
Process가 1개여도 위와 같은 상태를 지난다.
Data structures
OS는 프로세스 정보를 저장하기 위한 자료구조 형태를 가지고 있다.
- Process list
- Ready processes
- Blocked processes
- Current running process
- Register context
위와 같은 정보들을 PCBProcess Control Block라는 형태의 자료구조로 OS가 정보 접근을 한다.
C-structure 자료구조의 형태는 각각의 프로세스마다 PCB를 가지고 있어서 OS가 상태를 모니터링하고 스케쥴링한다.
PCB를 Process Descriptor라고도 하는데, 안에 프로세스에 대한 다음과 같은 정보들을 가지고 있다.
- CPU registers
- PID, PPID, process group, priority, process state
- CPU scheduling information
Context Switching
Context : 프로세스의 레지스터 값
context switching : 프로세스를 바꾼다.
CPU가 다른 프로세스로 바꾸면, 시스템은 기존의 프로세스 상태를 저장하고 새로운 프로세스의 상태를 읽는다
전환중에는 아무런 일을 할 수 없기 때문에 Context switching 시간을 overhead라고 한다.
Context switching 시간은 HW 마다 register set이 다르기 때문에 시간이 다르다.
위 처럼 P0에서 P1으로 바꾸게 될 때 P0 프로세스 상태를 저장하고 새로운 P1 프로세스의 상태를 읽는다.
댓글남기기