[Chapter 2] System Structure & Program Execution

slchoi·2022년 1월 17일
0

운영체제

목록 보기
2/4
post-thumbnail

KOCW에 공개된 이화여대 반효경 교수님 운영체제 강의를 수강 후 정리한 내용입니다.

  • 하드웨어의 동작에 관련된 내용을 다룸

1. 컴퓨터 시스템 구조


  • memory: CPU 작업 공간
    • CPU는 매순간 memory에서 instruction을 읽어와 실행
  • CPU
    • mode bit: 실행되고 있는 프로그램이 운영체제인지 사용자 프로그램인지를 구분
      • 0: 커널 모드(OS 코드 수행), 1: 사용자 모드(사용자 프로그램 수행)
      • 0인 경우, 메모리, IO 장치 접근 등 모든 일을 수행할 수 있도록 정의 됨. IO 장치에 접근하는 모든 작업은 mode bit이 0일 때만 실행될 수 있도록 함
      • 1인 경우, 제한된 instruction만 실행 가능 (보안상의 문제)
    • interrupt line: CPU와 IO 장치와 통신해야할 때 사용
      • 하드웨어 인터럽트(Interrupt): 하드웨어가 발생시킨 인터럽트
      • 소프트웨어 인터럽트(Trap): Exception(프로그램이 오류를 범한 경우), System call( 프로그램이 커널 함수를 호출하는 경우)
      • 인터럽트 벡터: 해당 인터럽트의 처리 루틴 주소를 가지고 있음
      • 인터럽트 처리 루틴 (Interrupt Service Routine): 해당 인터럽트를 처리하는 커널 함수
    • CPU의 레지스터 중에서 메모리 주소를 가리키고 있는 PC의 값에 해당하는 주소를 메모리에서 읽어와 명령어를 실행 (일반적으로 PC의 값은 4씩 증가)
    • 하나의 명령어 실행이 끝날 때마다 interrupt line 체크. 인터럽트가 들어오면 하던 작업을 멈추게 되고 CPU의 제어권이 운영체제에게 넘어감. 운영체제는 인터럽트 벡터를 확인해 인터럽트 처리 루틴을 실행
    • CPU의 전체적인 통제를 OS가 수행
  • timer
    • 무한루프를 도는 프로그램이 CPU에게 할당되면 CPU는 다른 작업을 수행할 수 없게됨
    • 특정 프로그램이 CPU를 독점하는 것을 막는 역할을 수행
    • timer에 일정한 값을 정해준 후에 사용자 프로그램에게 CPU를 넘겨줌
    • 일정 시간이 지나면 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킴
  • IO device
    • device controller가 IO device마다 존재해 IO device를 제어
    • local buffer: IO 장치의 작업 공간. 실제 데이터 저장
    • device driver: OS 코드 중 각 장치별 처리루틴 (소프트웨어)
    • device controller: 각 장치를 통제하는 일종의 작은 CPU (하드웨어)
  • DMA(Direct Memory Access) controller
    • IO 장치가 너무 자주 인터럽트를 걸어서 CPU가 방해를 받기 때문에 이것을 방지하기 위해 존재
    • 직접 메모리에 접근할 수 있는 controller
    • 메모리에는 CPU와 DMA가 접근 가능
    • CPU와 DMA가 메모리에 동시에 접근할 때 memory controller가 접근 순서를 조율해주는 역할을 함
    • CPU는 계속해서 하던 일을 진행하고 IO 장치의 local buffer에 정보가 읽거나 쓰여지면 DMA가 메모리에 정보를 저장해주는 역할을 수행한 후 CPU에게 인터럽트를 걸어줌
      • CPU의 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송
      • 바이트 단위가 아니라 block 단위로 인터럽트를 발생시킴

사용자 프로그램은 어떻게 IO를 수행?

  • 시스템콜(system call): 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것
    • 사용자 프로그램이 interrupt line을 setting하면 CPU 제어권이 운영체제에게 넘어감
  • trap을 사용하여 인터럽트 벡터의 특정 위치로 이동
  • 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동
  • 올바른 IO 요청인지 확인 후 IO 수행
  • IO 완료 시 제어권을 시스템콜 다음 명령으로 옮김
  • IO를 요청할 때는 소프트웨어 인터럽트를 사용하고 IO 수행이 끝나면 하드웨어 인터럽트 사용

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


  • 두 경우 모두 IO가 완료되었다는 것을 인터럽트를 통해 알려줌

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

  • IO 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감
  • IO 장치까지 가서 내용을 확인한 후 읽어와서 확인한 후 작업
    • ex) IO 장치에게 무언가를 쓰라고 했을 때, 명령을 내린 후 다른 작업을 수행하는 것이 아니라 IO 장치에 가서 내용이 쓰였는지 확인한 후 다른 작업을 수행

구현 방법 1

  • IO가 끝날 때까지 CPU를 낭비시킴
  • 매시점 하나의 IO만 일어날 수 있기 때문에 IO 장치도 낭비됨

구현 방법 2

  • IO가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗음
  • IO 처리를 기다리는 줄에 그 프로그램을 줄 세움
  • 다른 프로그램에게 CPU를 줌

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

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

동기식 입출력과 비동기식 입출력의 차이점

  • 프로세스가 입출력이 완료될 때까지 아무 일도하지 않고 기다리게 되면 동기식 입출력, 사용자 프로세스가 입출력 요청을 한 뒤 입출력이 진행되는 동안 그 프로세스가 바로 CPU를 잡아 다른 instruction을 실행하는 경우는 비동기식 입출력
  • 프로세스가 CPU를 가지고 있든 가지고 있지 않든 상관없이 프로세스가 입출력을 실행을 기다리면 동기식, 기다리지 않으면 비동기식 입출력

3. 서로 다른 입출력 명령어


  • 왼쪽 그림: 메모리에 접근하는 instruction과 IO 장치에 접근하는 instruction이 따로 존재
  • 오른쪽 그림: 메모리에 접근하는 instruction을 통해 IO 장치에 접근 =< memory-mapped IO

4. 저장장치 계층 구조


  • 위로 갈수록 속도가 빠르고, 가격이 비싸지고, 용량이 적어짐
  • CPU가 직접 접근 가능한 것을 Primary(Executable, byte 단위로 접근 가능하다는 것을 의미), 직접 접근하지 못하는 것을 Secondary라고 부름
  • main memory(DRAM), cache memory(SRAM), 레지스터는 휘발성
  • secondary는 비휘발성

5. 프로그램 실행


1. 메모리 load

  • virtual memory: 각 프로그램마다 독자적으로 가지고 있는 메모리 주소
  • 프로세스에서 당장 필요한 부분은 physical memory에 올려두고 당장 필요하지 않은 부분은 disk의 swap area 부분에 올려놓음
    • swap area는 메모리 용량의 한계로 하드 디스크를 메모리 연장 공간으로 사용하는 부분을 의미

2. 커널 주소 공간의 내용

  • data: 운영체제가 사용하는 여러 자료구조들이 들어있는 공간
    • 하드웨어를 관리하고 처리하는데 각각의 하드웨어마다 자료구조를 하나씩 만들어서 관리
    • 운영체제는 프로세스도 관리. 프로세스를 관리하기 위한 자료구조가 PCB(Process Control Block)
  • stack: 함수를 호출하거나 리턴할 때 사용하는 공간
    • 사용자 프로세스마다 커널의 스택을 따로 두고 있음

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

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

3. 프로그램의 실행

2추자 강의 끝
게시물에 사용된 사진은 강의 내용을 캡쳐한 것입니다.

profile
예비 백엔드 개발자

0개의 댓글