2020-10-24 운영체제 컴퓨터 시스템 구조 (강의정리)

컴퓨터 시스템 구조

  • 보통 컴퓨터라고 부르는건 CPU, 메모리를 지칭한다.
  • 메모리 : CPU의 작업공간, CPU는 매순간(클럭) 메모리에서 기계어를 읽어 프로그램을 실행시킨다
  • mode bit : cpu에서 실행되는게 사용자 프로그램인지, os인지 구별
  • 무한루프에 빠지는걸 방지하게 위해 프로그램을 실행할때, timer가 시간설정을 하고 시간이 지나면 interrupt를 보낸다.
  • 인터럽트 요청이 들어오면 CPU 제어권이 OS한테 넘어간다.

Modebit

  • 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 OS에 피해가 가지 않도록 보호장치 필요
  • Mode bit을 통해 하드웨어적으로 2가지 operation지원
    • 1 사용자모드 : 사용자프로그램 수행
      • 제한된 명령어만 실행할 수 있다.
    • 0 모니터모드 : OS코드 수행
      • 아무 명령어나 실행할 수 있다.
    • interrupt, exception이 발생하면 하드웨어가 mode bit을 0으로 바꾼다.
    • 사용자 프로그램에게 CPU를 넘기기 전에 mode bit을 1로 변경

Timer

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

Device Controller

  • I/O Device Controller
    • I/O 장치 유형을 관리하는 작은 CPU
    • 제어 정보를 위해 control register, status register를 가진다.
    • local buffer를 가진다(data register)
  • I/O는 실제 device와 local buffer 사이에 일어난다. CPU가 버퍼에 접근해서 데이터를 메모리에 복사한다.
  • Device Controller는 I/O가 끝났을 경우 interrupt로 CPU에게 알린다.

DMA(Direct Memory Access) Controller

  • 메모리를 접근할 수 있는 device는 cpu만 있었는데, interrupt를 많이 당해서 DMA Controller도 메모리에 접근할 수 있다.
  • 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
  • CPU의 중재없이 device controller가 device의 buffer storage의 내용을 메모리에 block단위로 직접 전송
  • 바이트 단위가 아니라 block단위로 인터럽트 발생시킴

입출력(I/O)수행

  • 모든 입출력 명령은 특권 명령
  • 사용자 프로그램은 어떻게 I/O하는가?
    • 시스템콜(System call) : 사용자 프로그램은 OS에게 I/O 요청
    • trap을 사용하여 인터럽트 벡터의 특정 위치로 이동
    • 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동
    • 올바른 I/O요청인지 확인 후 I/O 수행
    • I/O 완료 시 제어권을 시스템콜 다음 명령으로 옮김

인터럽트

  • 인터럽트 당한 시점의 레지스터와 program counter를 save한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다.
  • 보통은 하드웨어 인터럽트를 인터럽트라고한다.
  • 넓은 의미
    • interrupt(하드웨어 인터럽트) : 하드웨어가 발생시킨 인터럽트
    • Trap(소프트웨어 인터럽트)
      • Exception : 프로그램이 오류를 발생할때
      • 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 완료는 인터럽트로 가르쳐준다.

저장장치 계층 구조

  • 위로갈수록 빠르지만 단위공간당 가격이 비싸고 용량이 작다.
  • main memory, cache memory, register는 휘발성이다. 그 아래는 비휘발성
  • 최근에는 main memory도 비휘발성인 요소가 들어가는 반도체도 등장
  • Primary(execturable) : CPU에서 직접 접근가능한 메모리 매체. => register, cache, main memory
    • CPU가 접근하려면 byte단위로 접근 가능한 매체여야한다.
  • Secondary : CPU가 직접접근 못하는 매체.
    • Disk들은 바이트 단위가 아닌 Sector단위로 접근한다.
  • caching : 재사용을 목적으로 한다.

프로그램의 실행(memory load)

  • 프로그램은 실행파일형태로 File System에 저장. 실행시키면 메모리로 올라가서 프로세스가 된다.
  • 물리적인 메모리로 바로 올라가는게 아닌 virtual memory에 우선 올라간다.
  • 프로그램을 실행하면 해당 프로그램의 address space가 형성된다. address space는 stack, data, code로 구성되어있다.
  • 모든 프로그램이 독자적인 Address Space를 가지고 있는데, 프로그램을 실행시킬때, 물리적인 메모리에 올리는거다.
    • 실제로 virtual memory에 있는 stack, code, data가 연속적으로 할당되는게 아니라 일부는 swap area 일부는 main memory에 존재한다.

커널의 주소공간내용

  • code : 커널코드
    • 시스템콜, 인터럽트 처리코드
    • 자원관리를 위한 코드
    • 편리한 서비스 제공을 위한 코드
  • stack : processA, B, C … 의 스택들이 각각 존재
  • data : ProcessA(PCB), ProcessB(PCB), CPU, memory, disk

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

  • 사용자 정의 함수 : 자신이 정의한 함수
  • 라이브러리 함수 : 갖다쓰는 함수, 프로그램의 실행파일에 포함되어있다.
  • 커널함수 : OS의 함수, 커널함수의 호출 = 시스템콜, 커널코드안에 정의가 되어있어서 내프로그램안에 없다. 호출만 할 수 있다.
Written on October 24, 2020