Limited Direct Execution

이주희·2022년 9월 15일
0

OS

목록 보기
3/17

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

배경

여러 프로세스를 동시에 실행되는 것처럼 보이기 위해서는 CPU 공유는 불가피
-> CPU 시간을 나누어 사용해야한다

문제점 발생

  • 성능 저하
  • 제어 문제
    CPU 통제 유지하면서 프로세스를 효율적으로 사용해야함,, 중요

원리

direct execution이란

그냥 cpu에서 실행하는것

직접 실행할 때...

  1. 프로그램이 OS가 원치않은 일을 할지 어떻게 아나
  2. 어떻게 프로그램 실행 중단을 하고 다른 프로그램으로 넘어가나

두가지를 해결해야함

문제 1 제한된 연산

프로세스가 원하는 대로 CPU 직접 실행을 하면 특수 종류 연산 (ex) 디스크 입출력 요청, CPU 추가할당) 과 같은 원치 않은 연산을 하게 될수도 있음

  • user mode 도입
    입출력 요청 할수없음 -> 시스템콜을 통해 실행

    • 시스템 콜은 trap 특수명령어 실행해야함
      커널 안으로 분기함( 레지스터들 저장) -> 모든 연산 처리 가능
    • 완료시 return-from-trap 특수명령어 호출
      다시 usermode로 돌아옴
  • kernel mode
    모든 작업 수행 가능

trap...

커널은 부팅 시 trap table 만든다

운영체제는 하드웨어에게 trap handler 위치를 알려준다
-> 특정 상황 발생 시 하드웨어는 무엇을 해야할지 알 수 있음

usermode 시스템콜 호출과정

  1. 해당 시스템콜 번호를 레지스터 또는 스택에 저장
  2. trap 명령어 호출
  3. 위 명령어 처리하는 trap handler 실행됨
  4. 운영체제가 trap handler 읽어서 해당 코드 이동, 실행

-> 보안 기법...

문제점 2 프로세스간 전환

프로세스도 프로그램이고 운영체제도 프로그램
-> 둘중 하나만 실행 가능하다

=> 전환이 자유로워야 함

협조방식: 시스템 콜 호출까지 대기

프로세스가 비정상적 행동은 하지 않는다고 가정
= CPU를 알아서 주기적으로 반환

-> 비정상적 행위(0으로 나누기) 나 시스템콜 호출시 운영체제로 주도권 넘어감 (수동적)
만약 무한루프에 빠지게 된다면 문제발생

비협조방식: 운영체제가 제어권 확보

위의 상황과 같이 시스템콜 없이 제어권을 가져오려면,,
-> 하드웨어의 도움을 받는다

판단은 timer interrupt로 한다

timer interrupt:
수 밀리 초마다 인터럽트라고 불리는 하드뒈어 신호 발생

인터럽트 발생시 interrupt handler 실행
-> 제어권이 운영체제로 넘어감

문맥의 저장과 복원

현재 프로세스를 중단하고 다음 프로세스로 넘어갈 때 context switch라 불리는 코드 실행

  • 현재 프로세스 레지스터 값 커널 스택에 저장
  • 새로운 프로세스 커널스택으로부터 레지스터값 복원
  • 스택포인터 레지스터 값을 새로운 프로세스 커널 스택으로 변경

이 코드는 주로 어셈블리로 작성됨 (실행시간때문)

swtch.S 파일 코드 일부

0개의 댓글