OS study

CPU에서 여러 프로세스를 사용할 때 Time-Sharing을 할건데 어떻게 효율 적이게 할 것인가?

  • 어떻게 overhead 최소화해서 할 것인가
  • 어떻게 OS가 CPU에 대한 통제권을 잃지 않으면서 효율적으로 할 것인가

Direct Excution

간단하게 프로그램이 직접 CPU에서 동작하게 하면된다.

문제:

  • 프로그램이 민감한 부분에 대한 접근을 마음대로 할 수 있다.

그러면 악의적인 프로그램이 CPU 모든 걸 접근해서 변경해버릴 수 있다

Trap

단순히 프로그램이 CPU에서 실행되게 하는 것이 아니라 user-mode, kernel-mode를 나눠서 실행한다.

  • user-mode: 일반적인 프로그램이 실행되는 모드
  • kernel-mode: OS가 실행되는 모드

user-mode 에서는 일반적으로 process 가 동작하다가 위험 작업만 kernel-mode로 넘어가서 처리한다.

user-mode는 절대 kernel-mode에서 사용되는 명령어가 어디있는 지 알면 안된고 system call을 통해서 kernel-mode로 넘어가서 처리한다.

System call 처리 과정

sequenceDiagram
    participant Program as 프로그램 (User Mode)
    participant Hardware as 하드웨어
    participant OS as 운영체제 (Kernel Mode)

    Note over OS, Hardware: [ 부팅 시 (Boot Time) ]
    activate OS
    OS->>Hardware: 0. 트랩 테이블(Trap Table) 주소 전달 (특권 명령어)
    deactivate OS
    Note over Hardware: 시스템 콜 번호별 안전한<br/>트랩 핸들러 주소를 하드웨어에 기억

    Note over Program: [ 실행 시 (Run Time) ]<br/>일반적인 명령어 실행 중...
    
    Program->>Hardware: 1. trap 명령어 호출 (시스템 콜 번호 전달)
    activate Hardware
    
    Note over Hardware: 2. PC와 레지스터를 커널 스택에 저장<br/>3. User Mode ➔ Kernel Mode 전환<br/>4. 트랩 테이블을 참조하여 지정된<br/>트랩 핸들러(Trap handler)로 점프
    Hardware->>OS: 5. 제어권 전환
    deactivate Hardware
    
    activate OS
    Note over OS: 6. 번호에 맞는 시스템 콜 처리 작업 수행<br/>(예: 프로세스 생성, 파일 읽기 등)
    OS->>Hardware: 7. return-from-trap 명령어 호출
    deactivate OS
    
    activate Hardware
    Note over Hardware: 8. 레지스터를 커널 스택에서 복구<br/>9. Kernel Mode ➔ User Mode 전환<br/>10. 프로그램의 호출 이후 명령어로 점프
    Hardware->>Program: 11. 제어권 반환
    deactivate Hardware
    
    Note over Program: 시스템 콜 이후 명령어 이어서 실행...

How OS can control multiple processes

OS가 프로세스에게 CPU를 할당해주는 방법은 두가지다.

  1. 믿음. (Trust)
  2. 감시. (Supervision)

믿음으로 가면 누가 악의적으로 무한루프 도는 프로세스 만들면 끝장난다. 그래서 OS는 지속적으로 프로세스로 부터 제어권을 뺏어와야한다.

time interrupt를 발생해서 프로세스가 작업 도중에 강제로 멈추고 하드웨어는 time interrupt handler 를 실행해 OS에게 제어권을 넘겨준다. 그리고 스케줄링 알고리즘에 맞게 다음 프로세스에게 제어권을 넘겨준다.

Time interrupt 과정

sequenceDiagram
    participant Timer as 타이머 (Timer)
    participant Hardware as 하드웨어
    participant OS as 운영체제 (Kernel Mode)
    participant Program as 프로그램 (User Mode)

    Note over OS, Hardware: [ 부팅 시 (Boot Time) ]
    activate OS
    OS->>Hardware: 0-1. 인터럽트 트랩 테이블 주소 전달
    OS->>Timer: 0-2. 하드웨어 타이머 가동 (특권 명령어)
    deactivate OS
    Note over Hardware: 타이머 인터럽트 발생 시<br/>호출할 핸들러 주소 기억

    Note over Timer, Hardware: [ 실행 시 (Run Time) ]<br/>타이머 인터럽트 발생
    activate Timer
    Timer->>Hardware: 1-1. Time interrupt 발생 (일정 시간 간격)
    deactivate Timer
    activate Hardware
    
    Note over Hardware: 1-2. 현재 프로세스(A)의 PC와 레지스터를<br/>커널 스택에 저장<br/>1-3. User Mode ➔ Kernel Mode 전환<br/>1-4. 트랩 테이블을 참조하여 점프
    Hardware->>OS: 1-5. 제어권 전환 (Trap)
    deactivate Hardware
    
    activate OS
    Note over OS: 2. Time Interrupt Handler 실행<br/>(타이머 인터럽트 처리 루틴)
    
    Note over OS: 3. 스케줄링 알고리즘에 따라<br/>다음 프로세스(B) 선택 (Context Switch)
    Note over OS: 4. 선택된 프로세스(B)의 레지스터를<br/>커널 스택에서 복구
    OS->>Hardware: 5. return-from-trap 명령어 호출
    deactivate OS
    
    activate Hardware
    Note over Hardware: 6. Kernel Mode ➔ User Mode 전환<br/>7. 프로세스(B)의 다음 명령어로 점프
    Hardware->>Program: 8. 제어권 반환
    deactivate Hardware
    
    Note over Program: 다음 프로세스(B) 실행 시작...