Skip to content

Latest commit

 

History

History
207 lines (145 loc) · 10 KB

컴퓨터시스템구조.md

File metadata and controls

207 lines (145 loc) · 10 KB

💡 운영체제 구조

스크린샷 2022-07-11 오후 3 07 32

💡 컴퓨터 시스템 구조

스크린샷 2022-07-28 오후 6 01 00

  • CPU의 작업공간이 Memory 이기 때문에 CPU는 매순간(클럭) Memory로부터 기계어를 하나씩 읽어 실행한다.

    스크린샷 2022-07-28 오후 6 07 31
  • 하드 디스크 = 보조기억장치, Input & Output Device

  • Device Controller

    • 각 디바이스를 전담하는 작은 CPU 역할을 함
    • IO Device에 작업을 지시함
  • Local Buffer : 디바이스의 작업공간

  • CPU와 IO장치의 작업 속도 차이가 큼

  • 레지스터 : 메모리보다 더 빠르면서 정보를 저장할 수 있는 작업 공간

  • Mode Bit : CPU에서 실행되는 것이 운영체제인지 사용자 프로그램인지 구분하는 것

  • Interrupt Line

    • CPU는 메모리의 인스트럭션만 실행함 → CPU를 프로그램 A가 쓰고 있다면 키보드에서 읽어오거나 화면에 출력하거나 등의 IO Device의 결과를 CPU에게 전달하기 위해 Interrupt Line을 사용함
    • 인터럽트 작업이 들어있는 것오
  • CPU는 메모리 접근을 하다가 IO 작업이 필요할 경우, Device Controller에 작업을 시키고 그동안 메모리를 접근하여 작업을 하고 있음

  • CPU는 빠르면서 쉬지 않고 작업을 처리한다.

  • 만약 무한루프를 도는 프로그램을 실행한다면 프로그램이 종료되지 않고 CPU를 계속해서 사용하게 된다 → Time sharing을 구현할 수 없게 됨

  • Timer : 특정 프로그램이 CPU를 독점하는 것을 막음

    • Timer에 값을 세팅하고 사용자 프로그램으로 넘겨줌 → 세팅된 시간이 되면 timer가 CPU에 interrupt 함
  • 프로그램 A에서 IO가 필요할 경우, CPU를 OS에게 넘김


Mode bit

  • 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치 필요
  • Mode bit을 통해 하드웨어적으로 두 가지 모드의 operation 지원
1 사용자 모드 : 사용자 프로그램 수행
0 모니터 모드 : OS 코드 수행
* 모니터 모드 = 커널 모드, 시스템 모드
  • 보안을 해칠 수 있는 주요한 명령어는 모니터 모드에서만 수행 가능한 ‘특권명령’으로 규정

  • Mode bit이 0일때는 모든 것을 CPU에서 실행할 수 있음

  • 1일때는 실행할 수 있는 것이 한정적임

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

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

    스크린샷 2022-07-28 오후 6 45 41

Timer

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

Device Controller

  • I/O device controller
    • 해당 I/O 장치유형을 관리하는 일종의 작은 CPU
    • 제어 정보를 위해 control register, status register를 가짐 → CPU가 일을 시킬 때 해당 레지스터로 어떠한 일을 하라고 지시할때 사용함
    • 데이터를 저장하는 Local buffer를 가짐(일종의 data register) → device쪽은 처리한 data를 CPU로 보내거나 CPU에서 보내온 데이터를 local buffer에 담아두고 명령은 제어 레지스터로 처리
  • I/O는 실제 device와 local buffer 사이에서 일어남
  • Device controller는 I/O가 끝났을 경우 interrupt로 CPU에 그 사실을 알림
  • 용어 정리
    • device driver(장치구동기) : OS 코드 중 각 장치별 처리루틴 → software
    • device contoller(장치제어기) : 각 장치를 통제하는 일정의 작은 CPU → hardware

DMA(Direct Memory Access) Controller

  • 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용(빠른 입출력 장치 → 빈번한 인터럽트)
  • CPU의 중재없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송
  • 바이트 단위가 아니라 block 단위로 인터럽트를 발생시킴
  • 메모리를 접근할 수 있는 장치
  • 메모리를 CPU도 접근할 수 있고 DMA도 접근할 수 있음
  • 누가 먼저 접근하게 할지 교통정리를 해줌
  • IO 장치가 자주 인터럽트를 하여 CPU가 방해받는 것을 방지
  • CPU를 더욱 효율적으로 사용할 수 있음

입출력(I/O)의 수행

  • 모든 입출력 명령은 특권 명령
  • 사용자 프로그램의 I/O 절차(파일을 읽어오던 키보드 입력을 받던 등등)
    1. 시스템콜(system call) : 사용자 프로그램은 운영체제에게 I/O 요청
    2. Trap을 사용하여 인터럽트 벡터의 특정위치로 이동
    3. 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동
    4. 올바른 I/O 요청인지 확인 후 I/O 수행
    5. I/O 완료 시 제어권을 시스템콜 다음 명령으로 옮김

인터럽트(Interrupt)

  • 인터럽트 당한 시점의 레지스터와 program counter를 save 한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다
  • Interrupt(넓은 의미)
    • Interrupt(하드웨어 인터럽트) : 하드웨어가 발생시킨 인터럽트
    • Trap(소프트웨어 인터럽트)
      • Exception : 프로그램이 오류를 범한 경우
      • System call : 프로그램이 커널 함수를 호출하는 경우
  • 관련 용어
    • 인터럽트 벡터 : 해당 인터럽트의 처리 루틴 주소를 가지고 있음
    • 인터럽트 처리 루틴(Interrupt Service Routine, 인터럽트 핸들러) : 해달 인터럽트를 처리하는 커널 함수

시스템콜(System Call)

  • 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것

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

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

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

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

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

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

스크린샷 2022-07-29 오전 11 40 22


서로 다른 입출력 명령어

  • I/O를 수행하는 special instruction 에 의해
    • Memory address와 device address를 구분하여 둠
  • Memory Mapped I/O에 의해
    • Device에도 memory address 부여

저장장치 계층 구조

Registers ↔ Cache Memory ↔ Main Memory ↔ / Disk
Primary(Executable) : CPU에서 직접 접근가능 / Secondary
* Speed(빠름/느림), Cost(비쌈/쌈), Volatility(휘발성/비휘발성)
  • Caching
    • 더 빠른 저장시스템으로 정보를 복사함
    • 당장 필요한 정보만 읽어서 씀(상단으로 갈수록 용량은 작고, 속도는 빠름 → 더 빠르지만 용량 작은 저장매체로 데이터를 보냄)
    • 하단에서 불러올 필요가 없이 미리 저장해둔 데이터를 바로 사용
    • 목적 : 재사용

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

스크린샷 2022-07-29 오후 12 10 07


커널 주소 공간의 내용

스크린샷 2022-07-29 오후 12 15 46

  • PCB : 프로세스마다 생성됨

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

  • 함수(fuction)

    • 사용자 정의 함수 : 자신의 프로그램에서 정의한 함수
    • 라이브러리 함수 : 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수
      • 자신의 프로그램의 실행 파일에 포함되어 있음
      • 기능이 유용해서 누군가가 미리 만들어 둔 것

    ⇒ 사용자정의, 라이브러리 → 컴파일해서 실행파일을 만들면 실행파일 안에 함수들이 포함되어 있음

    호출 : 프로세스 A의 Address space → code 호출(점프 가능)

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

    ⇒ 커널코드 안에 들어있는 함수

    호출 : Kernel Address space → code 호출(점프 불가 → 시스템 콜)

    스크린샷 2022-07-29 오후 12 27 41