[OS] 컴퓨터 시스템의 구조

RepDay1·2023년 2월 26일
0

운영체제

목록 보기
1/8

이화여대 반효경 교수님의 운영체제 강의를 수강하고, 내용을 정리한것.

전체 구조

image

  • CPU : 매 클럭 사이클마다 메모리에서 기계어를 하나씩 읽어서 실행

    • registers : CPU안에 작은 저장공간, 메모리보다 빠름
    • mode bit : CPU에서 실행되는게 운영체제인지 사용자 프로그램인지를 구분해줌
    • interrupt line : 프로그램이 memory 영역만을 사용해서 작동하기는 어렵기 때문에, I/O device 접근을 위해 프로그램 실행 중 interrupt를 걸어 해당 device에서 데이터를 읽거나 쓰는 기능을 맡음
  • Memory : CPU의 작업 공간

  • I/O device : 키보드,마우스 입력장치 , 모니터는 출력장치, 하드디스크는 디스크에 있는 데이터를 입력하는 입력 장치이기도 하면서 컴퓨터에서의 처리결과를 저장하기도는 하는 출력장치기도함

  • device controller : 각 입출력장치에 붙어서 각 디바이스를 전담하는 작은 cpu역할을 하는 컨트롤러

    Mode Bit

    image

  • 사용자 프로그램의 잘못된 수행(무한루프 같은) 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치

  • cpu는 항상 instruction 하나를 수행하면 interrupt line을 체크해 interrup이 발생 했는지를 확인함

  • Mode Bit은 하드웨어적으로 두 가지의 operation을 지원해준다

    • 1 (사용자 모드) : 사용자 프로그램 수행
    • 0 (커널 모드) : OS 코드 수행
  • 보안을 해칠 수 있는 중요한 명령어는 커널 모드에서만 수행 가능한 "특권명령"으로 규정

  • interrup이나 Exception이 발생하면 하드웨어가 mode bit을 0으로(커널모드)로 바꿈

  • OS가 사용자 프로그램에게 CPU를 넘기기전에 mode bit을 1로 셋팅하고 넘겨줌

  • Interrupt line은 항상 프로그램이 memory 영역만을 사용해서 작동하기는 어렵기 때문에, I/O device 접근을 위해 프로그램 실행 중 interrupt를 걸어 해당 device에서 데이터를 읽거나 씀

    Timer

  • 정해진 시간이 흐른 뒤 OS에게 CPU제어권이 넘어가도록 interrupt를 발생시키는 역할을 함(무한 루프 방지에 딱이네..)

  • 타이머는 매 클럭 틱 때마다 1씩 감소

  • 타이머 값이 0이 되면 타이머 인터럽트 발생

  • CPU를 특정 프로그램이 독점하는 것으로부터 보호(CPU의 time sharing 보장)

  • 위의 역할 말고도 현재 시간을 계산하기 위한 용도로 사용되기도 함

    Device Controller

  • 해당 IO 장치유형을 관리하는 작은 CPU

  • 제어 정보를 위해 control register , status register를 가짐(CPU의 지시를 위한 레지스터 예를 들어 "local buffer" 에 들어간 데이터를 출력하라 뭐 이런거)

  • local buffer를 가짐(일종의 data register) - 만약 키보드에서 'a'라는 입력이 들어오면 이 'a'가 local buffer에 저장됨

  • 입출력은 실제 device와 local buffer사이에서 일어나게됨

  • device controller는 입출력이 끝났을 경우 interrup를 걸어서 CPU에게 입출력이 끝났음을 알려줌

  • device driver(장치 구동기) : OS code 중 각 장치별 처리 루틴을 의미 - Software영역

  • device Controller(장치 제어기) : 각 장치를 통제하는 일종의 작은 CPU - Hardware

    DMA Controller (Direct Memory Access)

  • 입출력의 과도한 interrup를 방지하기 위한 Controller

  • 바이트 단위가 아니라 block 단위로 인터럽트를 발생시키며, 이로CPU를 효율적으로 사용할 수 있도록 도와주는 역할

  • CPU의 도움이나 개입없이 device controller가 divice의 buffer storage의 내용을 메모리에 block 단위로 직접 전송

    Memory controller

  • DMA controller와 CPU가 동시에 메모리에 접근하지 않도록 조율하는 역할 (메모리의 일관성을 보장)

    입출력(I/O)의 수행

  • 모든 입출력 명령은 특권 명령

  • 사용자 프로그램의 입출력 과정

    1. System Call - 사용자 프로그램이 운영체제에게 입출력을 요청할때 쓰는 명령어
    2. trap을 사용하여 interrupt 벡터의 특정 위치로 이동
    3. 제어권이 interrupt 벡터가 가리키는 interrupt 서비스 루틴으로 이동
    4. 올바른 입출력 요청인지 확인 후 입출력 수행
    5. 입출력 완료 시 제어권을 system call 다음 명령으로 옮김

    Interrupt

  • 좁은 의미 : interupt 당한 시점의 레지스터와 program counter를 저장 한 후 CPU의 제어를 interrupt 처리 루틴으로 넘김

  • 넓은 의미

    • 하드웨어 인터럽트 : 하드웨어가 발생시킨 인터럽트
    • Trap(sw 인터럽트) : Exception(프로그램이 오류를 범한 경우) , System call (프로그램이 커널 함수를 호출하는 경우)
  • intterup vector : 해당 인터럽트의 처리 루틴 주소를 가지고 있음

  • interrupt Service Routine(인터럽트 핸들러,인터럽트 처리루틴) : 해당 인터럽트를 처리하는 커널 함수, 운영체제에서 각 종류의 intterupt마다 정의되어 있음

동기식/비동기식 입출력

image

동기식 입출력(Synchronous I/O)
  • 입출력 요청 후 작업이 완료된 후에 사용자 프로그램에 넘어가며, 다음 작업을 수행할 수 있음 입출력을 호출한 프로세스 상태를 Blocked상태로 만들어 입출력이 끝날 때까지 cPU 를 할당받지 못하게함
  • 구현 방법1 (CPU낭비시키며 비효율적인 구현법)
    • 입출력이 끝날때 까지 CPU를 낭비
    • 매번 하나의 입출력만 일어날 수 있음
  • 구현 방법2 (1번 방식에 비해 CPU를 효율적으로 사용 가능하고 여러가지 입출력이 다중으로 시행 될 수 있음)
    • 입출력이 완료 될 때까지 해당 프로그램에게서 CPU를 뺏음
    • 입출력 처리를 기다리는 줄에 그 프로그램을 줄 세움
    • 다른 프로그램에게 CPU를 양도함
  • 입출력작업 완료는 인터럽트로 CPU에게 알려줌
비동기식 입출력(Asynchronous I/O)
  • 입출력이 시작된 후 입출력 작업이 끝나기를 기다리지 않고 CPU 제어권이 입출력 요청한 프로세스에게 바로 넘어가서 입출력과 무관한 처리 가능한 작업부터 수행
  • 입출력작업 완료는 인터럽트로 CPU에게 알려줌

서로 다른 입출력 명령어

image
1. 입출력을 수행하는 special instruction에 의해
2. Memory Mapped I/O에 의해, 예를 들어 100번지 접근은 일반 메모리에 접근이지만, 1000번지는 사실상 입출력을 하는 명령임

저장장치 계층 구조

image

  • intrenal 기억장치들은 주로 휘발성 기억장치들, external 기억장치들은 주로 비휘발성 기억장치로 구성
  • CPU가 직접 접근 가능한 primary 저장장치들은 register, cache memory, main memory로 구성됨
  • 용량이 적을수록 속도도 빠르고, cost가 비싸며, 용량이 클수록 속도도 느리고 cost가 저렴함
  • register와 main memory간의 연산 속도 차이를 위해서 cache memory를 사용함, 용량이 메인 메모리보다 적어서 빈번히 사용되는 필요한 정보 위주로 저장
    (Caching : 빠른 저장 장치에 정보를 복사해오는것, 재사용을 목적으로하는 작업으로 2번째 접근할 때는 하위 계층에서 읽어오는것보다 재사용을 통해 더 빠르게 접근가능)

프로그램의 실행(Memory Load)

image

  • 각 프로그람마다 독자적인 주소 공간이 생기며, 그 안에는 stack,data,code,영역으로 나누어져 있음
  • stack : 함수를 호출하거나, 리턴할때의 데이터를 임시 보관하는 영역
    • 가상 메모리에서 물리적인 메모리로 프로그램이 올라가는데, 메모리 낭비를 방지하기 위해 프로그램 중 당장 실행에 필요한 부분만 올라가고 나머지는 disk의 swap영역에 내려놓음
      --> 주소공간의 어떤 부분은 메모리에 있고 어떤 부분은 디스크의 swap영역에 있음
  • data : 변수,전역 변수 저장, 프로그램이 사용하는 자료구조 영역
  • code : 프로그램의 기계어 코드를 저장하는 영역
  • Disk : 위 그렘에서 스왑 영역과 file system 두 디스크가 있는데 스왑 영역은 메모리의 연장공간으로 휘발성, file system은 비휘발성 용도로 사용됨

커널 주소 공간의 내용

image

  • code : 위 그림에서 나와 있음

  • data : CPU , Memory, disk등의 하드웨어 자원을 관리하기 위한 자료구조나, 각종 프로세스를 관리하기 위한 자료구조가 있고, 각 프로세스의 상태나 CPU의 사용정보, 메모리의 사용 정보 등을 유지하기 위한 PCB라는 것도 있음

  • stack : 일반적은 프로그램 스택영역과 같지만, 커널의 스택영역은 현재 수행 중인 프로세스마다의 별도의 스택을 두어 관리함

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

  • 사용자 정의 함수 : 자신의 프로그램에서 정의한 함수 - 사용자 프로그램의 주소공간에 있음

  • 라이브러리 함수 : 자신의 프로그램의 실행 파일에 포함되어 있는 함수 - 사용자 프로그램의 주소공간에 있음

  • 커널 함수 : 운영체제의 프로그램의 함수, 커널함수의 호출 = 시스템 콜 - 커널 주소공간에 있음

    프로그램의 실행 과정(A라는 프로그램의 입장)

    image

Reference
http://www.kocw.net/home/cview.do?cid=3646706b4347ef09

0개의 댓글