System call
시스템 콜은 운영체제 커널에서 제공하는 서비스를 사용하기 위한 인터페이스로, 프로세스가 운영체제에게 요청하는 것입니다. 시스템 콜은 사용자 모드에서 실행 중인 프로세스가 운영체제의 기능을 사용할 수 있도록 하는 인터페이스입니다. 이를 위해 시스템 콜은 운영체제의 커널 모드에서 실행됩니다. 프로세스가 시스템 콜을 호출하면, 운영체제는 커널 모드로 전환되어 요청을 처리하고, 처리 결과를 다시 프로세스에게 반환합니다.
System Call이 Procedure Call과 유사한 이유
시스템 콜이 프로시저 콜과 유사한 이유는, 시스템 콜이 프로세스가 운영체제에게 요청하는 함수이기 때문입니다. 프로세스가 함수를 호출하면, 해당 함수는 운영체제 커널에서 실행됩니다. 이때 함수 호출과 시스템 콜의 구현 방식이 유사하므로, 시스템 콜은 프로시저 콜과 비슷한 형태를 가지게 됩니다.
따라서, 시스템 콜은 프로세스와 운영체제 간의 인터페이스로, 함수 호출과 유사한 형태를 가집니다. 이를 통해 프로세스가 운영체제의 기능을 사용할 수 있으며, 운영체제는 커널 모드에서 요청을 처리하여 보안과 안정성을 유지합니다.
Trap
Trap은 예외 상황이나 시스템 콜 등의 이벤트가 발생했을 때, 현재 실행 중인 프로세스를 일시 중지하고 운영체제 커널 모드로 전환하는 것을 의미합니다. Trap은 CPU에서 하드웨어적으로 지원되며, 이를 이용하여 운영체제는 사용자 모드와 커널 모드를 전환할 수 있습니다.
Return-To-Trap
RTT는 운영체제가 처리를 완료하고 다시 프로세스를 실행할 때, 이전에 실행 중이던 프로세스 상태를 복원하는 기법입니다. Trap을 통해 운영체제가 실행되면, 운영체제는 해당 이벤트를 처리하고 다시 프로세스를 실행합니다. 이때, Return-to-Trap(RTT) 기법이 사용됩니다.
Trap Table
Trap Table은 CPU가 Trap을 감지하면, 해당 이벤트를 처리할 운영체제의 함수 주소를 가지고 있는 테이블입니다. Trap Table에는 예외 상황, 시스템 콜 등의 이벤트에 대해 운영체제가 처리해야 할 함수들의 주소가 등록됩니다.
운영체제가 Trap을 이용하여 실행되고, 이벤트를 처리한 후에는, 해당 이벤트에 대한 처리가 끝나면 RTT를 통해 프로세스의 실행을 재개합니다. 이때, RTT를 통해 이전에 실행 중이던 프로세스의 상태를 복원하여, 중단되었던 지점부터 다시 실행할 수 있게 됩니다.
따라서, Trap과 RTT를 이용하여 운영체제는 사용자 모드와 커널 모드 간의 전환을 수행하고, Trap Table을 이용하여 각 이벤트에 대한 처리 함수를 등록합니다. 이를 통해 안정성과 보안을 유지하면서 운영체제가 이벤트를 처리할 수 있게 됩니다.
Limited Direct Execution Protocol (Timer interrupt; for context switching)
OS는 부팅하면서 trap table을 초기화 한다. 그리고 hardware에서는 syscall handler와 timer handler의 주소를 기억해둔다.
그리고 OS는 interrupt timer를 시작한다. 동시에 hardware에서는 timer를 실행하고 X ms마다 CPU를 interrupt를 한다.
user mode에서 process A가 실행하다가 설정한 시간보다 오래 수행하면 timer interrupt를 발생시키고, A의 kernel 스택에 레지스터 값을 저장하고, kernel 모드로 전환한다. 그리고 trap handler로 jump하게 되면 OS가 CPU를 다시 잡게 된다.
OS는 trap을 처리하고, switch routine을 실행하게 된다. 다음에 실행할 프로세스를 B로 정해두었다고 치면, A의 레지스터 값들을 A의 PCB에 저장하고, PCB에서 B를 다시 불러온 다음 B의 커널 스택으로 switch를 진행한다. 그리고 B로 return-from-trap instruction을 수행한다.
그러면 hardware에서는 kernel stack에 저장되어 있는 값들을 B의 레지스터 값으로 다시 불러오고, user mode로 바꿔주면서 B의 PC로 jump한다.
이제 User mode로 전환되면서 process B가 CPU를 사용하게 된다.
커널 스택 vs PCB
커널 스택과 프로세스 제어 블록(Process Control Block, PCB)은 운영체제에서 프로세스의 상태 정보를 관리하기 위해 사용되는 구조체입니다.
커널 스택은 커널 내부에서 사용되는 스택 구조체입니다. 커널 코드가 실행될 때 사용되며, 주로 인터럽트나 예외 처리 과정에서 중요한 역할을 합니다. 각 프로세스는 커널 스택의 자신만의 공간을 가지고 있습니다. 이 공간은 커널 코드가 실행될 때만 사용됩니다.
반면 PCB은 프로세스의 상태 정보를 저장하는 구조체입니다. 각 프로세스는 자신만의 PCB를 가지고 있으며, 이 PCB에는 프로세스의 상태 정보가 저장됩니다. 예를 들어, 프로세스의 레지스터 상태, 메모리 할당 정보, 파일 디스크립터 등이 저장됩니다. PCB은 커널 스택과 달리, 프로세스가 실행 중이든 대기 중이든 상관없이 계속해서 유지됩니다.
따라서, 커널 스택과 PCB은 용도와 사용 방법이 다릅니다. 커널 스택은 커널 내부에서의 일시적인 사용을 위해 만들어졌으며, 각 프로세스의 독립된 공간을 가지고 있습니다. PCB은 각 프로세스의 상태 정보를 저장하기 위한 구조체이며, 프로세스가 실행 중인지 대기 중인지와 상관없이 계속해서 유지됩니다.
'OS' 카테고리의 다른 글
[운영체제] 2. Program and Process (0) | 2024.03.25 |
---|---|
[운영체제] 1. What is an OS? (0) | 2024.03.25 |
Swap Space의 상호작용- (Physical Memory, Present Bit, Page Frame, Memory) (0) | 2023.04.06 |
Memory Management Policy (0) | 2023.04.06 |
Hybrid Approach on Paging, Multi-level Page Tables, Page Fault vs. Segmentation Fault (0) | 2023.04.06 |