[OS] 시스템 구조와 프로그램 실행

devheyrin·2022년 7월 7일
0

운영체제

목록 보기
2/2

컴퓨터 시스템 구조


CPU

💡 레지스터, 모드 비트, 인터럽트 라인!

레지스터

메모리보다 빠르면서 정보를 저장할 수 있는 작은 공간

Mode Bit

지금 CPU에서 실행되는 것이 운영체제인지 사용자프로그램인지 구분해서 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치이다!

사용자 프로그램에게 CPU를 넘겨줄 때는 mode bit 를 1로, 운영체제에게 넘겨줄 때는 0으로 바꿔 넘겨준다.

  • 0일 때
    • 모니터 모드, 커널 모드, 시스템 모드, 운영체제가 CPU 점유중일 때를 의미
    • 어떤 작업이든 할 수 있는 상태.
    • 보안을 해칠 수 있는 중요한 명령어(특권명령)는 모니터 모드에서만 수행 가능
  • 1일 때
    • 사용자 모드
    • 사용자 프로그램이 CPU 점유중일 때를 의미
    • 제한된 작업만 할 수 있는 상태. IO접근 등의 명령 수행 불가!

Interrupt line

주변기기가 CPU에게 어떤 사실을 알려주는 것을 Interrupt 라고 하고, 이를 감지하는 역할을 하는 것이 Interrupt line이다. CPU는 하나의 명령어를 실행할 때마다 인터럽트 라인을 확인하며 인터럽트가 발생했는지 확인한다.

  • 설명

    CPU는 IO 장치에 직접 접근할 수 없고, 메모리에만 접근할 수 있다. 그렇다면 다른장치로부터의 입출력을 수행해야 하는 명령은 어떻게 처리할까? CPU는 각 장치들의 controller 에게 지시를 보낸다. 이 작업은 CPU입장에서 굉장히 오랜 시간이 걸리기 때문에 CPU는 controller가 정보를 읽어올 동안 메모리에 접근하며 다른 일을 수행한다.

    그런데, 읽어온 값에 따라 다음 명령을 수행해야 하는 프로그램이라면? 입력이 들어올 때까지 다른 프로그램으로 넘어가서 작업을 수행한다.

    but, 무한 루프를 도는 프로그램에게 CPU가 한 번 넘어가면 프로그램이 종료되지도, IO를 하지도 않기 때문에 CPU가 다른 프로그램에게 넘어갈 수 없다. 이렇게 특정 프로그램이 CPU를 독점하는 것을 막기 위해 timer 라는 하드웨어가 존재한다! 운영체제는 timer에 시간을 세팅한 뒤 프로그램에게 CPU를 넘겨주고, 프로그램이 CPU를 쓰다가 timer interrupt 가 들어오면 CPU 제어권이 프로그램으로부터 OS로 넘어가게 된다.

    IO를 해야 한다면 프로그램이 자진해서 운영체제에게 CPU를 넘겨준다. (IO장치 접근은 운영체제만이 할 수 있다.) 운영체제가 해당하는 작업을 IO 컨트롤러에게 시키는 것. 작업을 시켜놓고 운영체제는 다른 프로그램에게 CPU를 넘겨주었다가, 입력이 버퍼에 들어오면 CPU에 interrupt 를 걸어 운영체제에게 제어권이 넘어온다.

Timer

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

DMA Controller

  • Direct Memory Access
  • 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용한다.
  • CPU의 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송한다.
  • 바이트 단위가 아닌 block 단위로 인터럽트를 발생시킨다.
  • CPU가 인터럽트를 덜 받을 수 있도록, 중간에서 일을 먼저 처리해 주는 보조 역할!
  • 원래 메인 메모리에는 CPU만 접근이 가능하지만, DMA 컨트롤러를 두면 두 가지가 메모리에 접근할 수 있다.
  • IO장치가 너무 자주 인터럽트를 발생시키면 CPU가 너무 자주 방해를 받기 때문에, CPU는 계속 자기 일을 하게 두고 local buffer에 들어온 내용을 DMA가 메모리로 복사해 주는 역할을 하고, 작업이 다 끝나면 CPU에 인터럽트를 걸어 알려준다.

메모리

CPU의 작업공간. CPU는 매 순간(매 클럭사이클)마다 메모리에서 기계어를 하나씩 읽어서 실행한다.


IO Device

*디스크는 보조기억장치이기도, 입출력장치이기도 하다.

Device Controller

  • 해당 IO장치 유형을 관리하는 일종의 작은 CPU
  • 제어 정보를 위해 control register, status register 를 가진다. (작업 지시를 위한 레지스터)
  • local buffer 를 가진다. (일종의 data register) 데이터를 저장해두는 공간. IO는 실제 device와 local buffer 사이에서 일어난다.
  • Device Controller 는 IO가 끝났을 경우 인터럽트를 발생시켜 CPU에 그 사실을 알린다.
  • Device Driver - 장치 구동기, OS 코드 중 각 장치별 처리 루틴에 해당하는 소프트웨어
  • Device Controller - 장치 제어기, 각 장치를 통제하는 일종의 작은 CPU

입출력의 수행

  • 모든 입출력 명령은 특권 명령이다. = 사용자 프로그램은 접근할 수 없다!
  • 그렇다면 사용자 프로그램은 어떻게 I/O를 할까?
    • 시스템 콜 : 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것.

    • 사용자 프로그램을 실행하다보면 함수를 호출하는 부분이 있다. 함수 호출이나 제어문을 만나면 메모리 위치를 점프한다. 내 프로그램 안에서 함수를 호출하는 것은 메모리 안에서 주소를 바꾸는 것.

    • 시스템 콜은 메모리 주소를 바꾸는 것보다는 복잡하다. 프로그램 실행 중 IO를 해야 한다면 프로그램이 직접 Interrupt line 을 세팅하는 instruction을 수행한다. CPU의 mode bit이 0으로 바뀌고, 운영체제에 제어권이 넘어가 IO를 수행할 수 있게 된다.

    • trap 을 사용해 인터럽트 벡터의 특정 위치로 이동한다.

    • 제어권이 인터럽트 벡터가 가리키는 인터럽트 처리 루틴으로 이동한다.

    • 올바른 IO요청인지 확인 후 IO를 수행한다.

    • IO 완료 시 제어권을 시스템콜 다음 명령으로 옮긴다.


인터럽트

인터럽트

  • 현대의 운영체제는 인터럽트에 의해 구동된다.
  • 인터럽트 당한 시점의 레지스터와 program counter를 저장한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다.
  • Interrupt, 하드웨어 인터럽트 : 하드웨어가 발생시킨 인터럽트 (보통 Interrupt 라고 하면 이것을 의미)
  • Trap, 소프트웨어 인터럽트
    • Exception : 프로그램이 오류를 범한 경우
    • System call : 프로그램이 커널 함수를 호출하는 경우

인터럽트 관련 용어

  • 인터럽트 벡터
    • 인터럽트 종류별 처리 루틴 주소를 가지고 있는 일종의 테이블!
  • 인터럽트 처리 루틴 (인터럽트 핸들러)
    • 해당 인터럽트를 처리하는 커널 함수


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

💡 두 경우 모두 IO의 완료는 인터럽트로 알려준다.

동기식 입출력

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

비동기식 입출력

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


서로 다른 입출력 명령어

  • IO를 수행하는 special instruction 에 의해
  • Memory Mapped IO에 의해

저장 장치 계층 구조

Primary

  • bite 단위로 접근가능
  • CPU가 직접 접근 가능, 실행가능
  • 속도 빠르고, 용량 적고, 비싸고, 휘발성이 높다.

Secondary

  • 섹터 단위로 접근 가능
  • CPU가 직접 접근 불가능, 실행 불가능
  • 속도 느리고, 용량 크고, 저렴하고, 휘발성이 낮다.

캐싱

  • 윗단으로 한 번 읽어들여놓은 것은 복사되어 다음에 호출할 때는 더 빠르게 사용할 수 있음.

프로그램의 실행 (메모리 로드)


커널 주소 공간(운영체제)의 내용

  • data 영역
    • 하드웨어 종류별 자료구조를 추상화하여 관리
    • PCB - Process Control Block 프로그램을 관리하기 위한 자료구조
  • stack 영역
    • 프로세스마다 별도의 커널 스택 존재

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

  • 사용자 정의 함수
    • 자신의 프로그램에서 정의한 함수
  • 라이브러리 함수
    • 자신의 프로그램에서 정의하지 않고 가져다 쓴 함수
    • 자신의 프로그램의 실행 파일에 포함되어 있다.
  • 커널 함수
    • 운영체제 프로그램의 함수
    • 커널함수를 호출하는 것 = 시스템 콜

프로그램 실행

  • 프로그램 실행 과정 전반에서 유저모드와 커널모드 전환이 반복된다!

Reference

운영체제 - 반효경 교수님 강의

profile
개발자 헤이린

0개의 댓글