본문 바로가기

CS(ComputerScience)/OSTEP

제한적 직접 실행 원리

728x90

제한적 직접 실행 원리

Limited Direct Execution

운영체제 개발자들은 프로그램을 빠르게 실행하기 위해 이 기법을 개발했다.

프로그램을 CPU상에서 그냥 직접 실행시키는 것!

 

feat. user mode, kernel mode, system call


📌  배운 것

 

CPU 가상화

한 프로세스를 잠시 동안 실행하고 다른 프로세스를 또 잠깐 실행하고..

CPU 시간을 나누어 쓰므로써 가상화를 구현

 

해결해야 할 문제

  • 성능저하, 시스템에 과중화 오버헤드 주지 않아야 함.
  • 제어 문제, 자원을 효율적으로 관리

OS는 제어권을 유지하면서 성능 저하가 없도록 하는것이 궁극적인 목표이다.

 

제어권을 상실하게 된다면 어떤 문제가 발생할까?

  • 한 프로세스가 영원히 실행을 계속해 컴퓨터를 장악
  • 접근해서는 안되는 정보에 접근

 


직접 실행 프로토콜(제한없음)

알기 쉬운 운영체제

일반적인 호출과 리턴을 사용해 main()으로 분기하고 다시 커널(운영체제)로 돌아오도록 설계

 

문제점

  • 프로그램이 운영체제가 원하지 않는 일을 하지 않는다는 것을 어떻게 보장할 수 있는가? 사용자모드, 커널모드
  • 운영체제는 어떻게 프로그램의 실행을 중단하고 다른 프로세스로 전환(시분할 기법)할 수 있는가?  문맥교환, 인터럽트, 스케듈링

OS가 프로그램 실행에 제한을 두지 않으면, 운영체제는 어떠한 제어도 할 수 없다. 제어를 할 수 없으면 단순한 라이브러리일 뿐이다.


제한된 연산

 

사용자모드와 커널 모드를 나누는 이유는?

하드웨어 자원에 대한 접근 권한 일부 제한하기 위해

사용자 모드에서는 하드웨어 자원에 대한 접근이 일부 제한되어 있다. 반면, 커널 모드에서는 컴퓨터의 모든 자원에 대한 접근 권한을 가진다.

프로세스가 사용자 모드에서 실행 중이면 입출력 요청을 할 수 없도록 설정한다. 이때 입출력 요청을 한다면 프로세스가 예외를 발생시키고, 운영체제는 해당 프로세스를 제거한다.

이를 위해 커널 모드로 진입하기 위한 trap 명령어와 사용자 모드로 돌아가기 위한 return-from-trap 명령어가 제공된다.

또한 운영체제는 하드웨어에게 트랩 테이블의 메모리 주소를 알려주는 명령어를 함께 제공한다.

 

시스템 콜이란?

하드웨어는 사용자 프로세스에게 시스템 콜을 제공해 파일 시스템 접근, 프로세스 생성 및 제거, 다른 프로세스와의 통신 및 메모리 할당 등의 주요 기능을 사용자 프로그램에게 제공한다.

 

트랩 테이블이란?

커널은 부팅 시에 트랩 테이블을 만들고 이를 이용하여 시스템을 통제한다.

컴퓨터가 부트될 때는 커널 모드에서 동작하기 때문에 하드웨어를 원하는 대로 제어할 수 있다.

제한적 직접 실행 프로토콜

 

프로세스는 커널 스택을 각자 가지고 있다.

 

커널 스택을 사용하는 이유?

커널 모드로 진입하거나 진출할 때 하드웨어에 의해 프로그램 카운터와 범용 레지스터 등의 레지스터가 저장되고 복원되는 용도로 사용하기 위해(문맥 교환을 위해)

 


프로세스 간 전환

 

CPU에서 프로세스가 실행 중 = 운영체제는 실행중이지 않다는 것

운영체제가 실행중이지 않다면, 어떤한 조치도 취할 수 없다.

 

운영체제는 어떻게 CPU를 다시 획득하여 프로세스를 전활할 수 있는가?

  • 시스템 콜 기다리기, 대부분의 프로세스는 자주 시스템 콜을 호출하여 CPU의 제어권을 운영체제에게 넘겨준다.
  • 불법적인 연산 일어나기를 기다리기, 예를 들어 어떤 수를 0으로 나누는 연산을 실행하거나 접근할 수 없는 메모리에 접근하려고 하면 운영체제는 트랩을 일으켜 CPU를 획득해 해당 행위를 하는 프로세스를 종료시킨다.
  • 타이머 인터럽트, 인터럽트(하드웨어의 추가적인 도움)가 발생하면 현재 실행 중인 프로세스가 중단되고 미리 구성된 운영체제의 인터럽트 핸들러가 실행된다. 

 

인터럽트는 언제 발생할까?

  • 프로세스가 CPU를 독점 할때 
  • 다른 프로세스로 전환해야 할때

 

문맥교환이란?

현재 실행 중인 프로세스를 계속 실행할 것인지 아니면 다른 프로세스로 전환할 것인지를 결정해야 한다.

이 결정은 운영체제의 스케줄러라는 부분에 의해 내려진다.

현재 실행중인 프로세서의 레지스터 값을 커널 스택에 저장하고 곧 실행될 프로세스의 커널 스택으로 부터 레지스터 값을 복원하는 것. 현재 실행 중인 범용 레지스터, PC, 현재 커널 스택 포인터를 저장!

 

제한적 직접 실행 프로토콜(타이머 인터럽트)

 

Lock 기법

운영체제는 내부 자료 구조에 동시에 접근하는 것을 방지하기위해

커널 안에서 동시에 다수의 활동이 진행될 수 있게 허용.

 


📌 회고

면접 때 받았던 질문과 관련된 내용이 많이 나오는 챕터였다.

대답을 엉망으로 했는데, 이번 기회에 제대로 알게 된 느낌!

시스템 콜이 왜 생겼고 커널 모드와 유저 모드를 왜 나눴는지 알지 못했는데 명료해졌다.

 

📌 개선 방향

공부할 때, 확실히 왜 이렇게 설계했을까?

왜 이런 상황이 문제일까?

이런걸 생각하며 공부해야 할 것 같다.

스스로 생각할 시간과 흐름을 따라가는 시간을 가져야겠다.

 

📌 참고 문서

운영체제 : 아주 쉬운 세 가지 이야기

'CS(ComputerScience) > OSTEP' 카테고리의 다른 글

스케줄링: 멀티 레벨 피드백 큐  (0) 2023.08.22
스케줄링: 개요  (0) 2023.08.22
프로세스 API  (0) 2023.07.31
가상화, 프로세스의 개념  (0) 2023.07.25
운영체제 개요  (0) 2023.07.18