21-1학기 운영체제에 대해서 배운 내용들을 상기하고 기록하기 위해 글을 쓰려고 합니다.
process란 실행중인 program으로 program은 secondary storage에 파일 형태로 들어 있는 컴퓨터를 실행 시키기 위한 일련의 순차적으로 작성된 명령어의 모음이고 이 프로그램이 실행하기 위해서 변환되어 main memory에 있는 상태를 process라고 한다.
Source Code -Compiler-> Object File -Linker-> Executable -Loader-> Process
Source Code : 프로그램이 수행하고자 하는 작업이 프로그래밍 언어로 표현되어 있다.
Compiler : 사람이 이해할 수 있는 프로그래밍 언어로 작성된 소스 코드를 컴퓨터(CPU)가 이해할 수 있는 기계어로 표현된 오브젝트 파일로 변환한다.
Object File : 컴퓨터가 이해할 수 있는 기계어로 구성된 파일, 자체로는 실행을 할 수 없고 프로세스로 변환되기 위한 정보가 삽입되어야 한다. 소스코드 하나 당 하나의 오브젝트 파일이 생성된다.
Linker : 관련된 여러 오브젝트 파일들과 라이브러리들을 연결하여 메모리로 로드 될 수 있는 하나의 실행파일로 작성한다.
Executable : 특정한 환경(OS)에서 수행될 수 있는 파일로 프로세스로의 변환을 위한 header, 작업 내용인 text, 필요한 데이터인 data를 포함한다. 오브젝트 파일은 여러 개라도 실행파일은 하나다.
process의 구성요소는 Program code, Data, Stack, Process control block(PCB)이다.
PCB는 3가지로 나눌 수 있다.
Process를 식별 할 수 있는 정보를 포함한다.
process Identifier
Parent Process Identifier
User Identifier
Process의 상태에 대한 정보를 포함한다.
User-Visible Registers
Control&Status Registers(PC,PSW)
Stack Pointers(Control stack)
Process의 실행과 자원에 관련된 정보를 포함한다.
Scheduling and State Information
Memory Management
Resource Ownership and Utilization
Inter-Process Communication
Process Privileges
Data Structuring
New상태에서 메모리가 한정적이므로 OS 받아드려야 Ready상태가 된다.
Running상태에서 I/O와 같은 event를 기다리기위해 Block queue로 process의 포인터가 이동한 것을 Blocked상태라고 한다.
위의 Five-State Process Model에서 Ready/Suspend상태와 Blocked/Suspend상태가 추가된 Model이다.
예를들어 CPU는 I/O보다 빠르므로 모든 process가 I/O작업을 하고 있다면 실행을 하고 싶어하는 program을 실행하는 것이 더 이득이므로 hard disk에 suspend area로 blocked된 process와 실행시킬 process를 swap하여 suspend area에 있는 process를 Suspend process라고한다.
여기서 Ready/Suspend상태는 I/O작업이 다 끝났지만 main memory로 swap되지 않은 상태를 의미한다.
process는 Interrupt, Error, System call에 의해 switching이 된다.
mode에 따라 psw의 supervisor/user mode의 bit가 달라진다.
Kernel mode(System Mode,Control Mode) : OS가 실행될 때
User Mode : user program이 실행될 때, kernel mode보다 더 적은 권한이 부여된다.
user mode-> kernel mode
user mode(A)-> kernel mode ->user mode(B)
dispatcher : process switching을 담당하는 OS
kernel을 프로그램으로 보지 않는 방법이다.
os가 독자적인 entity로 privileged mode로 실행된다.
process안에서 kernel을 제외한 OS를 실행하는 방법이다.
불필요한 switching을 피할 수 있으며, os코드가 실행 될 때는 privileged mode로 실행한다.
주요한 kernel function을 제외한 OS process를 다른 process와 다르지 않은 process라고 보는 방법이다.
구현이 간단하지만 switching을 많이 한다는 단점이 있다.
Objected orient design처럼 메모리를 관리하는 프로세스만 수정하면 되므로 확장성이 향상된다.
실제 시스템을 예를 들어 알아보자!
UNIX SVR4는 O.S. Execution within a Process이므로 대부분의 OS가 user process환경에서 실행된다.
User Level Context : code, data, stack
Register Context : processor state information
System Level Context : process Id, Process control information
User Running은 user mode로 실행중인 상태이고, Kernel Running은 Kernel mode로 실행중인 상태이다.
interrupt가 발생한 이유나 어떤 System call을 요청했는지에 따라서 kernel Running에서 3가지 상태로 갈 수 있다.
1. Kernel Running -> Zombie : 프로그램을 종료해야한다는 System call이 왔을 때
2. Kernel Running -> Asleep in Memory : I/O와 같은 event를 기다리기 위해서 대기할 때(sleep==blocked)
3. Kernel Running -> Preempted : time out이 되었을 때, Preempted와 Ready to Run In memory는 둘다 Ready상태인데 ready상태이다.
틀린 점이 있다면 언제든 댓글 남겨주세용..!