본문 바로가기
정리/운영체제(Operating System)

2. System Structure & Program Execution

by 스꼬맹이브로 2022. 5. 31.
728x90
반응형
SMALL

본 포스팅은 이화여자대학교의 반효경 교수님의 강의를 듣고 정리하였습니다.

http://www.kocw.net/home/search/kemView.do?kemId=1046323 

 

운영체제

운영체제는 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로서 모든 컴퓨터 시스템의 필수적인 부분이다. 본 강좌에서는 이와 같은 운영체제의 개념과 역할, 운영체제를 구성하는 각

www.kocw.net

 

[컴퓨터 시스템의 구조]

  • 크게 컴퓨터 내부와 외부로 이루어짐
  • 입출력 디바이스는 다음 그림 외에도 더 있음에 주의

간단한 컴퓨터 시스템 구조도
자세한 컴퓨터 시스템 구조도

  • CPU : 매 클럭마다 메모리의 instruction(기계어)을 하나씩 읽어서 실행
    • registers : CPU에 존재하는 읽어서 저장할 수 있는 작은 공간, 메모리 주소를 저장
    • mode bit : 현재 실행하고 있는 프로그램이 운영체제인지 사용자 프로그램인지 구별
      (1: 사용자모드, 0:모니터모드[= 커널모드, 시스템모드])
      • 보안을 해칠 수 있는 중요한 명령어는 모니터 모드에서만 수행 가능
      • interrupt나 exception 발생 시 하드웨어는 mode bit을 0으로 바꿈
      • 사용자 프로그램에게 CPU를 넘기기 전에 mode bit을 1로 setting
      • 사용자 모드일 경우 한정된 기계어만 실행 가능
      • I/O 디바이스 처리는 모니터 모드일 경우에만 가능 
    • interrupt line : 현재 실행하고 있는 instruction과 I/O 디바이스에 전달되는 요청을 정리
      * 명령어 중 파일 읽기 발생 → CPU가 디스크에 명령 전달 → 디스크는 명령 수행 후 자신의 local buffer에 저장[그 동안 CPU는 다른 일을 수행] 디스크 수행이 끝난 후 CPU의 interrupt line에 전달 interrupt가 들어오면 수행하고 있던 프로그램 정지 전달받은 내용을 운영체제가 판단 후 필요한 프로그램 buffer에 copy 운영체제는 수행하고 있던 프로그램에게 CPU 전달 수행하고 있던 프로그램이 끝나면 전달받은 내용을 기반으로 기존 명령어 수행
      * CPU는 하나의 활동이 끝날때마다 interrupt line Check
      * 인터럽트 벡터 : 해당 인터럽트의 처리 루틴 주소를 가지고 있음
      * 인터럽트 처리 루틴(interrupt service routine, 인터럽트 핸들러) : 해당 인터럽트를 처리하는 커널 함수
    • timer
      • 특정 프로그램이 CPU를 독점하는 것을 막기 위해 존재
      • 운영체제는 특정 프로그램에게 CPU를 넘겨줄 때 timer에 일정한 시간을 설정한 후 넘겨줌
      • time sharing을 구현하기 위해 널리 이용됨
      • 현재 시간을 계산하기 위해서도 사용
  • 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(장치 구동기, software) ≠ device controller(장치제어기, hardware)
  • 입출력 (I/O)의 수행
    • 모든 입출력 명령은 특권 명령
    • 사용자 프로그램은 어떻게 I/O를 하는가?
      • 시스템콜(system call) : 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것
      • trap을 사용하여 인터럽트 벡터의 특정 위치로 이동
      • 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동
      • 올바른 I/O 요청인지 확인 후 I/O 수행
      • I/O 완료 시 제어권을 시스템콜 다음 명령으로 옮김
  • 인터럽트(Interrupt)
    • 인터럽트 당한 시점의 레지스터와 program counter를 save한 후 CPU의 제어를 인터럽트 처리 루틴에 넘김
    • 넓은 의미의 인터럽트
      • Interrupt(하드웨어 인터럽트) : 하드웨어가 발생시킨 인터럽트
      • Trap(소프트웨어 인터럽트)
        : Exception(프로그램이 오류를 범한 경우), System call(프로그램이 커널 함수를 호출한 경우)

 

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

동기식 입출력(synchronous I/O)    * 헷갈릴때는 립싱크를 생각하자!

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

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

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

동기식 및 비동기식 흐름

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

[입출력의 결과를 기다리면 동기식, 기다리지 않고 다른 instruction을 실행하면 비동기식!]

 

DMA(Direct Memory Access)

  • 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
  • CPU의 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송
  • 바이트 단위가 아닌 block 단위로 인터럽트를 발생시킴

서로 다른 입출력 명령어

  1. I/O를 수행하는 special instruction에 의해(일반적인 방법)
    • 메모리주소와 디바이스 주소는 분리되어 관리
  2. Memory-Mapped I/O에 의해
    • 각 deivce에도 메모리 주소를 부여해서 device 접근 시 메모리 주소로 접근

 

저장장치 계층구조

  • 위로 올라갈수록 처리 속도가 빠르고, 단위 공간당 가격이 비싸기 때문에 용량이 적으며 Primary는 휘발성이 있고 Secondary는 비휘발성이다.
  • CPU에서 직접 접근할 수 있는 구조 → primary, 즉 byte 단위로 접근이 가능

프로그램의 실행

  • 메모리 Load
    • 프로그램 실행 시 가상 메모리 공간에 메모리 주소 공간 생성 →  필요한 부분만 물리적 메모리로 옮김 
    • data : 프로그램이 사용하는 자료구조, code : 기계어코드, stack : 데이터를 보관하는 곳

메모리 Load 흐름
프로그램 실행~끝 흐름

 

커널 주소 공간의 내용

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

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

'정리 > 운영체제(Operating System)' 카테고리의 다른 글

6. Process Synchronization  (0) 2022.09.01
5. CPU Scheduling  (0) 2022.08.17
4. Process Management  (0) 2022.08.08
3. Process  (0) 2022.06.17
1. Introduction to Operating Systems  (0) 2022.05.25