[운영체제] 2. System Structure & Program Execution

do_large·2021년 1월 24일
0

운영체제강의

목록 보기
2/8
post-thumbnail

시스템 구조

운영체제를 배우기에 앞서 컴퓨터의 하드웨어적인것을 설명하는 단원

  • 컴퓨터 시스템에서 하드웨어가 어떻게 작동하는지
  • 프로그램이 어떻게 하드웨어 위에서 작동하는지

CPU

  • 메모리는 cpu의 작업공간
    cpu는 메모리에서 기계어를 읽어서 실행

cpu는 매 클럭마다 메모리에서 읽어온 명령을 실행하는 역할
cpu안에는 메모리보다 빠르면서 정보를 저장할 수 있는 register가 있다.

메모리에 있는 프로그램이 I/O작업이 필요할때는 CPU를 OS한테 넘겨주고 OS가 처리하도록 해야한다.
프로그램이 직접 I/O작업하는건 불가능

Mode bit

  • 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치가 필요하다.
  • 모니터 모드에서는 모든 실행이 가능하지만, 사용자 모드에서는 제한되는 부분이 있다. (보호장치)
  • cpu에서 실행되는게 운영체제인지 사용자 프로그램인지 구분해줌
  • Mode bit을 통해 하드웨어적으로 두 가지 모드의 operation을 지원한다.

    1 사용자 모드 : 사용자 프로그램 수행
    0 모니터 모드(커널모드, 시스템모드) : OS 코드 수행

    - 보안을 해칠 수 있는 중요한 명령어는 모니터 모드에서만 수행 가능한 '특권명령'으로 규정
    - Interrupt나 Exception 발생시 하드웨어가 mode bit을 0으로 바꾼다.
    - 사용자 프로그램에 CPU를 넘기기 전에 mode bit을 1로 세팅한다.

타이머

  • OS가 특정 프로그램에 CPU를 넘겨줄 때는 타이머에 일정 시간을 설정 한 뒤 넘겨준다.
  • 정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킨다.
  • 타이머는 매 클럭 틱 때마다 1씩 감소한다.
  • 타이머 값이 0이되면 타이머 인터럽트가 발생한다.(해당 프로그램으로 부터 CPU를 뺐을 수 있다.)
  • 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) controller

메모리에 직접 접근할 수 있는 컨트롤러

원래는 메모리에 직접 접근할 수 있는 장치는 CPU뿐이었는데, DMA를 통해 메모리에 접근할 수 있다.

CPU와 DMA가 동시에 메모리에 접근하는 것을 방지하는 역할을 memory controller가 한다.

  • 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
  • CPU의 중재없이 device controller가 device의 buffer storage의 내용을 메모리에 block단위로 직접 전송
  • 바이트 단위가 아니라 block단위로 인터럽트를 발생시킴
  • I/O 장치가 자주 interrupt를 하게되면 cpu가 너무 자주 방해를 받게된다. 그래서 일처리에 방해가 될 수 있다. 그래서 dma를 사용해서 cpu는 자기일을 계속 하게하고 중간중간에 들어오는 값들을 메모리로 복사해준다. 그 작업이 다 끝나면 cpu에 interrupt를 한번만 걸어서 알려준다.
    그래서 cpu가 interrupt 당하는 빈도를 줄여서 장치를 더 효율적으로 사용할 수 있다.

입출력의 수행

  • 모든 입출력 명령은 특권명령이다.
  • 사용자 프로그램은 I/O에 직접 접근할 수 없다.
  • 사용자 프로그램이 I/O를 하는 방식을 보자
    • 시스템 콜 : 사용자 프로그램이 운영체제의 서비스를 받기위해 커널함수를 호출하는것
      ( ex )사용자 프로그램은 운영체제에게 I/O요청을 한다.)
    • trap을 사용하여 인터럽트 벡터의 특정위치로 이동한다.
    • 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동한다.
    • 올바른 I/O 요청인지 확인 후 I/O를 수행한다.
    • I/O완료시 제어권을 시스템콜 다음 명령으로 옮긴다.

인터럽트

  • 인터럽트
    인터럽트 당한 시점의 레지스터와 program counter를 save한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다.
  • 넓은 의미의 인터럽트
    • interrupt(하드웨어 인터럽트) : 하드웨어가 발생시킨 인터럽트
    • trap(소프트웨어 인터럽트) :
      Exception : 프로그램이 오류를 범한 경우
      System call : 프로그램이 커널함수를 호출하는 경우
  • 인터럽트 관련 용어
    • 인터럽트 벡터
      해당 인터럽트의 처리 루틴 주소를 가지고 있음 (키보드, 타이머 등 여러 종류의 인터럽트가 있는데, 어떤 인터럽트 요청인지에 따라 어떤 함수로 가야하는가에 대한 표시를 벡터에 해준다. )
    • 인터럽트 처리 루틴 (인터럽트 핸들러)
      해당 인터럽트를 처리하는 커널 함수
      들어온 인터럽트의 타입에 맞게 처리를 하는 코드

2회차

지난수업 정리

  • cpu는 메모리에서 계속 무언가를 읽어온다.
  • 레지스터 중에서 메모리 주소를 가리키고 있는 프로그램 카운터가 가리키는 메모리주소에서 명령어를 읽어와서 cpu가 그것을 실행하고, 메모리가 가리키는 그 다음 명령어를 순차적으로 실행하게 된다.
    하지만 항상 순차적으로 실행되는것은 아니다. (if문이나 함수호출등을 만나는 경우)
  • 인스트럭션을 실행하고 그 다음 인스트럭션을 실행하기전에 하는게 interrupt 가 들어온게 있는지 체크를 한다. 만약 인터럽트가 있다면 CPU를 누가쓰고 있었던 상관없이 CPU제어권이 운영체제한테 넘어가게 된다.
  • 프로그램이 IO작업을 해야할 때 OS에 요청을 해야한다.
    시스템 콜!!!!
    운영체제에 있는 함수를 사용자프로그램이 요청하는것
    사용자프로그램이 의도적으로 interrupt를 세팅한다.
    그럼 os는 하던일을 멈추고 cpu의 제어권이 os에 넘어가게 된다.

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

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

동기식 입출력

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

비동기식 입출력

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

I/O를 할 수 있는 2가지 방법

  • I/O를 수행하는 special instruction에 의한 방법
    메모리 접근 인스트럭션이 따로 있고, I/O를 수행하기 위해서 special instruction이 존재한다.
  • Memory Meapped I/O에 의한 방법
    각 I/O 디바이스는 장치의 주소를 가지고 있는데,
    각 장치에 메모리 주소를 할당해서 메모리 주소로 접근해서 사용하는 방법

저장장치 계층구조

  • 녹색 부분은 붉은색 부분보다 속도는 빠르고 가격은 비싸고, 휘발성 매체이다.
  • CPU에서 직접 접근할 수 있는 매체를 Primary라고 한다.
  • CPU가 직접 접근해서 처리 못하는거를 Secondary라고 한다.

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

프로그램은 하드디스크에 실행파일의 형태로 저장이 되어있다.
실행파일을 실행시키면 메모리에 올라간다.
바로 메모리로 올라가는게 아니라 가상메모리에 올라가는 단계를 거친다.

  • 프로그램을 실행시키면 프로그램의 주소공간이 생성이된다.
    이는 메모리주소공간임
    각 주소공간은 code, data, stack 등으로 구성이된다.
    code 는 프로그램에서 실행할 기계어 코드를 담고있고,
    data는 전역변수나, 자료구조
    stack은 함수가 쌓이고 실행되는 부분

  • 모든 프로그램은 주소공간을 가지고 있고, 물리적인 메모리에 올려서 실행을 시킨다.
    프로그램을 실행시킬때 만들어진 주소공간을 물리적인 메모리에 통째로 올려놓는게 아니라, a를 실행시킬때도 필요한 부분만 메모리에 올림. 메모리 낭비를 막기위해

  • 메모리에 올라와서 사용하진 않지만 보관하고 있어야하는 데이터들이 있을때는, 디스크의 swap area에 올려놓게 된다.

하드디스크 중 file system은 파일의 데이터들을 계속 보관하고 있지만,
swap area는 전원이 나가면 가지고 있는 정보는 의미없는 값이 된다.

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

code

자원을 효율적으로 관리하는 코드

data

운영체제가 사용하는 여러 자료구조가 저장이 되어있다.
운영체제는 하드웨어를 직접 관리하고 통제하는데,
하드웨어마다 관리하기 위한 자료구조를 만들어 관리한다(이부분은 뭐지..?)

프로세스마다 pcb가 하나씩 만들어진다.

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

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

  • 커널 함수
    내 프로그램에 들어있는 함수가 아니라 커널 코드에 들어있는 함수
    운영체제 프로그램의 함수
    커널 함수의 호출 = 시스템콜

0개의 댓글