flow-vector
article thumbnail
"운영체제 : 아주 쉬운 세가지 이야기"를 읽으면서 핵심 내용을 정리하였습니다.
 이화여대 반효경 교수님의 운영체제 강의를 듣고 복습 차원에서 책 한권을 완독해 보고자 합니다.
 잘못된 정보가 있다면 댓글 남겨주시면 감사하겠습니다!

제한적 직접 실행 (Limited Direct Execution)

  • CPU 가상화를 구현하기 위한 핵심적인 기법

직접 실행만으로는 부족한가?

프로세스가 CPU에 올라가서 실행되는 것을 직접 실행이라고 하는데, 어떤것이 부족해서 직접 실행에 '제한' 이라는 키워드가 붙게 되었을까? 우선 "직접 실행" 시 운영체제가 하는 일에 대해서 먼저 알아보자.

  • 직접 실행 시 운영체제가 하는 일
    1. 실행하려는 프로그램을 프로세스 리스트에 추가한다.
    2. 프로그램을 위한 메모리를 할당한다.
    3. 프로그램을 메모리에 탑재(load)한다.
    4. argv를 사용자 스택(프로세스의 스택 메모리)에 저장한다.
    5. 레지스터 내용을 삭제 한다.
    6. main() 함수 실행
    7. 프로그램이 종료되면 프로세스 메모리 반환
    8. 프로세스 목록에서 항목제거

상기 과정 중에는 크게 2가지 문제점이 있는데 이는 아래와 같다.

  • 문제점 1 : 제어권
    • 어떤 프로그램이 운영체제가 원치 않는 일을 하지 않는다는 보장을 할 수 없음
    • 한 프로세스가 컴퓨터 하드웨어 자원을 마음대로 조작하는 경우를 방지 할 수 없음
  • 문제점 2 : 프로세스간 전환
    • CPU에서 어떤 프로세스가 실행 중이라는 것을 운영체제는 CPU를 가지고 있지 않다는 것임
    • 특정 프로세스가 무한 루프에 걸리면 운영체제는 어떻게 CPU제어권을 다시 가지고 올 수 있을까?

제어권, 프로세스간 전환 이라는 2가지 문제 점을 해결하기 위해 "제한적"이라는 키워드가 등장하였다

제어권 문제의 해결 : User mode, Kernel mode

CPU는 User mode, Kernel mode 라는 2가지 실행 모드를 제공하여 제어권 문제를 해결 하였다.

  • CPU 설계에 따라 다르지만 보통 mode bit를 통해 2가지 모드를 구분할 수 있다.
  • ex) mode bit == 0 이면 커널 모드, mode bit == 1이면 사용자 모드
  1. User mode
    • 응용 프로그램의 하드웨어 자원에 대한 접근 권한이 제한됨
  2. Kernel mode
    • 운영체제가 컴퓨터의 모든 자원에 접근 할 수 있게 됨
    • 특권 명령어를 실행 할 수 있음

→ 즉, Kernel mode 로 전환이 되었을 때 시스템을 제어 할 수 있게 됨 (운영체제만 하드웨어를 컨트롤 할 권리를 가짐)

 

그렇다면 응용 프로그램이 하드웨어의 지원이 필요할 경우 User mode와 Kernel mode 사이를 어떻게 전환 할 수 있을 까? 이는 시스템 콜 호출을 통해 전환이 가능하다.

  • 응용프로그램에서 시스템콜을 호출하면 시스템콜 함수 안에 어셈블리어로 구현 되어 있는 trap 명령어가 실행된다.
  • trap 명령어는 user mode를 kernel mode로 상향 조정하게 되고 운영체제의 특정 코드 부분을 실행 하도록 한다.
  • 부팅시, 커널은 trap table을 만들고 trap table안에는 trap handeler가 들어 있다.
  • 운영체제는 CPU에게 trap handler의 위치를 알려 주게 되고 특정 trap에 맞는 명령어를 CPU가 실행 할 수 있게 된다.

제어권관련 실행 흐름

 

프로세스간 전환 문제의 해결 : Timer Interrupt

특정 프로세스에서 다른 프로세스로 전환이 필요할 때, 타이머 장치를 통해(하드웨어의 지원) Timer Interrup를 발생 시켜 프로세스간 전환을 가능하게 한다.

  • 타이머 장치 : 수 밀리초 마다 인터럽트를 발생 시키는 장치
  • 인터럽트가 발생하면 현재 실행 중인 프로세스가 중단되고 인터럽트 핸들러가 실행된다.

A 프로세스에서 B 프로세스로 전환되는 것을 문맥교환(context switch)라고 한다.

프로세스를 전환 시킬지 말지 결정하는 정책을 스케쥴링이라고 한다.

→ Timer Interrupt로 인한 프로세스간 전환 덕분에 프로세스들은 자신만의 CPU를 가지고 있는 것 처럼 느낄 수 있게 되었다. (CPU 가상화)

타이머 인터럽트에 의한 프로세스간 전환

문맥 교환에 걸리는 시간
- imbench라는 도구를 통해 시간 측정이 가능하다
- 현대에 와서 2 ~ 3Ghz 프로세서의 경우 1마이크로초 미만이 걸리지만 운영체제의 많은 연산과정이 메모리를 접근하는 연산이기 때문에 프로세서가 좋아 진다고 해서 시간이 극적으로 줄어들지는 않는다.

참고 자료

https://kldp.org/node/73308

'Computer Science > Operating System' 카테고리의 다른 글

메모리 가상화 - 주소 변환의 원리  (0) 2023.02.06
CPU 가상화(3) - 스케줄러 (2)  (0) 2023.01.30
CPU 가상화(2) - 스케줄러(1)  (0) 2023.01.29
프로세스 관련 API  (0) 2023.01.21
운영체제 개요  (1) 2023.01.17
profile

flow-vector

@flow-vector

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!