[운영 체제]System Structure & Program Execution

Jihun·2022년 3월 1일
0

운영 체제(OS)

목록 보기
2/8
post-thumbnail

System Structure & Program Execution

컴퓨터 시스템 구조

https://user-images.githubusercontent.com/59672592/156171478-b6f45618-8140-4fe0-a6ee-26dcb826363c.png

mode bit

  • 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영 체제에 피해가 가지 않도록 하기 위한 보호 장치 필요
  • Mode bit을 통해 하드웨어적으로 두 가지 모드의 operation 지원
    • 1 사용자 모드: 사용자 프로그램 수행

    • 0 모니터 모드: OS코드 수행

    • 보안을 해칠 수 있는 중요한 명령어는 모니터 모드에서만 수행 가능한 특권 명령 으로 규정

    • Interrupt나 Exception 발생시 하드웨어가 mode bit을 0으로 바꿈

    • 사용자 프로그램에게 CPU를 넘기기 전에 mode bit을 1로 셋팅

      https://user-images.githubusercontent.com/59672592/156173682-3b42cdd9-4342-4536-97a2-07e9eb5f3fb7.png

특권 명령

CPU가 수행하는 명령에는 일반 명령특권 명령이 있다.

  • 일반 명령: 메모리에서 자료를 읽어오고, CPU에서 계산을 하는 등의 명령이고 모든 프로그램이 수행할 수 있는 명령
  • 특권 명령: 보안이 필요한 명령으로 입출력 장치, 타이머 등의 장치를 접근하는 명령으로 항상 운영체제만이 수행할 수 있다.

커널 모드와 유저 모드

  • 커널 모드: 운영체제가 CPU의 제어권을 가지고 명령을 수행하는 모드로 일반 명령특권 명령 모두 수행할 수 있다.
  • 유저 모드: 일반 사용자 프로그램이 CPU제어권을 가지고 명령을 수행하는 모드이기 때문에 일반 명령만을 수행할 수 있다.

Timer

  • 타이머
    • 정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킴
    • 타이머는 매 클럭 틱 때마다 1씩 감소
    • 타이머 값이 0이 되면 타이머 인터럽트 발생
    • CPU를 특정 프로그램이 독점하는 것으로부터 보호
  • 타이머는 time sharing을 구현하기 위해 널리 이용됨
  • 타이머는 현재 시간을 계산하기 위해서도 사용

Device Controller

  • I/O device controller
    • 해당 I/O 장치 유형을 관리하는 일종의 작은 CPU
    • 제어 정보를 위해 control register, status register를 가짐
    • local buffer를 가짐(일종의 data register)
  • I/O는 실제 device와 local buffer 사이에서 일어남
  • Device controller는 I/O가 끝났을 경우 interrupt로 CPU에 그 사실을 알림
  • device driver(장치구동기)
    • OS 코드 중 각 장치별 처리루틴 → software
  • device controller(장치제어기)
    • 각 장치를 통제하는 일종의 작은 CPU → hardware

DMA(Direct Memory Access)

  • DMA
    • 특정 하드웨어 하위 시스템이 CPU와 독립적으로 메인 시스템 메모리에 접근할 수 있게 해주는 컴퓨터 시스템의 기능
    • 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
    • DMA는 source와 destination, 그리고 전송할 바이트수만 주면 알아서 data를 전송
    • 모든 data 전송이 끝나면 HW interrupt로 CPU에게 완료를 알려주는 구조
    • 바잍 단위가 아니라 block단위로 인터럽트를 발생시킴

https://user-images.githubusercontent.com/59672592/156178365-63df8e2f-48b5-4e97-b8d8-bd4ea888525d.png

입출력(I/O)의 수행

  • 모든 입출력 명령은 특권 명령
  • 사용자 프로그램은 어떻게 I/O를 하는가?
    • 시스템콜(system call)
      • 사용자 프로그램은 운영체제에게 I/O요청
  • trap을 사용하여 인터럽트 벡터의 특정 위치로 이동
  • 제어권이 인터럽트 벡터의 특정 위치로 이동
  • 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동
  • 올바른 I/O요청인지 확인 후 I/O수행
  • I/O 완료 시 제어권을 시스템콜 다음 명령으로 옮김

인터럽트(Interrupt)

  • 현대의 운영 체제는 인터럽트에 의해 구동됨
  • CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요할 경우에 마이크로프로세서에게 알려 처리할 수 있도록 하는 것을 말한다.
  • 인터럽트 당한 시점의 레지스터와 program counter를 save한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다.
  • 하드 웨어 인터럽트
    • 하드웨어가 발생시키는 인터럽트로, CPU가 아닌 다른 하드웨어 장치가 cpu에 어떤 사실을 알려주거나 cpu 서비스를 요청해야 할 경우 발생시킨다.
  • 소프트웨어 인터럽트**(= Trap)**
    • 소프트웨어(사용자 프로그램)가 스스로 인터럽트 라인을 세팅한다.
    • Exception: 프로그램이 오류를 범한 경우
    • System call: 프로그램이 커널 함수를 호출하는 경우
  • 인터럽트를 발생시키기 위해 하드웨어/소프트웨어는 cpu내에 있는 인터럽트 라인을 세팅하여 인터럽트를 발생시킨다.
  • cpu는 매번 명령을 수행하기 전에 인터럽트라인이 세팅되어있는지를 검사한다.

인터럽트 관련 용어

  • 인터럽트 벡터
    • 인터럽드 발생시 처리해야 할 인터럽트 핸들러의 주소를 인터럽트 별로 보관하고 있는 테이블이다.
  • 인터럽트 처리 루틴(Interrupt Service Routine, 인터럽트 핸들러)
    • 실제 인터럽트를 처리하기 위한 루틴으로 인터럽트 서비스 루틴이라고도 한다.
    • 운영체제의 코드 영역에는 인터럽트별로 처리해야할 내용이 이미 프로그램되어 있다.
  • PCB(Process Control Block)
    • 커널의 데이터 영역에 존재하며 각각의 프로세스마다 고유의 PCB가 있다.
    • 인터럽트 발생 시 프로세스의 어느 부분이 수행중이었는지를 저장한다.
    • (수행중이던 memory 주소, 레지스터값, 하드웨어 상태 ...)

인터럽트 과정

process A 실행 중 디스크에서 어떤 데이터를 읽어오라는 명령을 받았다고 가정해보자.

  • process A는 system call을 통해 인터럽트를 발생시킨다.
  • CPU는 현재 진행 중인 기계어 코드를 완료한다.
  • 현재까지 수행중이었던 상태를 해당 process의 PCB(Process Control Block)에 저장한다. (수행중이던 MEMORY주소, 레지스터 값, 하드웨어 상태 등...)
  • PC(Program Counter, IP)에 다음에 실행할 명령의 주소를 저장한다.
  • 인터럽트 벡터를 읽고 ISR 주소값을 얻어 ISR(Interrupt Service Routine)로 점프하여 루틴을 실행한다.
  • 해당 코드를 실행한다.
  • 해당 일을 다 처리하면, 대피시킨 레지스터를 복원한다.
  • ISR의 끝에 IRET 명령어에 의해 인터럽트가 해제 된다.
  • IRET 명령어가 실행되면, 대피시킨 PC 값을 복원하여 이전 실행 위치로 복원한다.

동기식 입출력과 비동기식 입출력

동기식 입출력(synchronous I/O)

  • I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감
  • 구현 방법 1
    • I/O가 끝날 때까지 CPU를 낭비시킴
    • 매시점 하나의 I/O만 일어날 수 있음
  • 구현 방법 2
    • I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗음
    • I/O처리를 기다리는 줄에 그 프로그램을 줄 세움
    • 다른 프로그램에게 CPU를 줌

비동기식 입출력(asynchronous I/O)

  • I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감

https://user-images.githubusercontent.com/59672592/156184601-82ee3ab3-5e4e-44f4-9561-59ba67658b28.png

두 경우 모두 I/O의 완료는 인터럽트로 알려줌

저장장치 계층 구조

https://user-images.githubusercontent.com/59672592/156191603-23057d95-2f27-4d06-ae49-04f594b2ff31.png

https://user-images.githubusercontent.com/59672592/156191723-95ed2e65-4f3c-4ece-9bb0-e44b23eb7f76.png

커널 주소 공간의 내용

https://user-images.githubusercontent.com/59672592/156187617-9660e929-28d9-40c3-a3ef-03d950d16a2b.png

사용자 프로그램이 사용하는 함수

  • 함수
    • 사용자 정의 함수

      • 자신의 프로그램에서 정의한 함수
    • 라이브러리 함수
      - 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수
      - 자신의 프로그램의 실행 파일에 포함되어 있다

      프로세스 A의 Address space

    • 커널 함수
      - 운영체제 프로그램의 함수
      - 커널 함수의 호출 = 시스템 콜

      커널 Address space

참고

profile
slow and steady

0개의 댓글