ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 제한된 직접 수행: restrict operation / context switching
    운영체제 2024. 3. 18. 16:27

    직접 수행 (Direct Execution)

    어떤 프로그램을 수행시키고 OS가 더 간섭을 안하는 상태를 의미합니다.

    가장 빠른 건 이 방법인데, 문제가 있습니다.

     

    타임쉐어링이 안되니까 -> 계속 그 프로세스 하나만 실행될 것

    프로세스 하나가 독점해버리는 문제가 발생합니다.

     

    그래서 이에 대한 해결책이 제한된 직접 수행 (Limited Direct Execution)

    사용하는 방법이 두가지 있습니다.

     

    1. 제한된 명령어. Restrict Operation

    일반적인 명령어들은 직접 수행을 하게 해 줍니다.

    대신 몇몇 명령어들은 실행해달라고 부탁해야 합니다.

    OS, 즉 커널은 이에 대해 부탁을 받고 실행을 해줍니다.

     

    시스템 콜 이야기입니다.

    유저모드, 커널모드를 왔다갔다 하는게 바로 이 이야기입니다.

    이때 상태를 바꾸려면 트랩*을 걸어야합니다.

     

    시그널: 일반적인 프로세스에 보내는 신호

    트랩: OS에게 보내는 소프트웨어적 사건 신호

    인터럽트: OS에게 보내는 하드웨어적 사건 신호

     

    트랩이 발생하면

    하드웨어에서 커널 스택에 레지스터를 보관/복구

    커널/유저 모드로 이동

    트랩 핸들러*/PC가 가리키는 곳으로 이동

     

    *트랩핸들러: 부팅될 때, 각 트랩에 대한 처리 방법을 모아서 테이블을 만드는데 그게 트랩 테이블이고, 각각의 처리 방법이 트랩 핸들러

     

    커널모드 / 유저모드 이동 간 반드시 하드웨어를 거치긴 해야 합니다.

     

    그리고, 유저 모드에서 실행될 때는 직접 수행이 되고 있어서

    제한적인 직접 수행이라 표현합니다.

     

     

    2. 프로세스 간 스위칭. Switching between Processes

    1번 방법으로 완벽하게 끝나는 문제가 아닙니다.

    예를 들어, 시스템 콜을 쓰지 않고 무한 루프를 돌리면 OS는 CPU에 대한 제어권을 얻지 못합니다.

    이를 방지하기 위해 타이머 인터럽트를 사용합니다.

     

    일정 시간이 지나면 타이머 인터럽트를 발생 시키고, 커널 모드로 들어가 트랩 핸들러가 작동합니다.

    그리고 돌아올 때 다른 프로세스로 전환시킵니다.

    이때 사용되는 기술이 Context Switching* 입니다.

     

    *Context Switching

    CPU에서 스케줄링할 때 프로세스 간 전환은 당연히 일어나는 일입니다.

    이때, 전환하기 전의 프로세스가 어디까지 진행했는지에 대한 정보를 반드시 알아야 다시 스케줄링 될 때 복구 가능합니다.

    위에 굵게 표시해둔 글씨가 컨텍스트입니다. 자세히 말하자면 PC와 같은 레지스터 정보입니다.

    PC가 다음 실행 명령어가 어디인지 알려주니까, 이걸 알면 어디까지 실행했는지 알 수 있습니다.

     

    이걸 저장하는 걸 Context Save, 복구하는 걸 Context Restore 라고 합니다.

    이러한 컨텍스트의 전환을 컨텍스트 스위칭이라 합니다.

     

     

    인터럽트 중 인터럽트 발생, 혹은 시스템 콜 중 인터럽트가 발생하면

    인터럽트를 디스에이블 시키거나, 혹은 우선순위를 두거나 할 수 있습니다.

    보통 이건 Concurrency 문제입니다.

Designed by Tistory.