System Structure & Program Execution 1: 컴퓨터 시스템 구조, CPU, Disk, Controller, Interrupt

ㅎㅎ·2023년 7월 6일
0

운영체제, 반효경

목록 보기
2/19

시스템 구조

  • CPU: 연산처리장치, 메모리에서 매 클럭마다 메모리에서 instruction을 읽어서 실행, register의 PC가 다음 수행할 명령의 주소를 가지고 있음, CPU는 메모리 하고만 일할 수 있음, I/O device와는 일할 수 없다. CPU는 정말 정말 빠른 속도로 일하는데 반해 I/O device와 같은 친구들은 너무나 느리기 때문에 같이 일을 하지 않음.

    • mode bit: 현재 CPU가 실행하고 있는 것이 OS인지 일반 사용자 프로그램인지 나타냄, 1인 경우 사용자 프로그램, 0인 경우 OS를 나타냄, 1인 경우 I/O device나 권한 없는 프로그램의 메모리에 접근하려는 instruction을 수행할 수 없도록 HW적으로 구현돼 있음, 보안을 위한 처리
    • register: 메모리보다 빠른 기억 장치
    • interrupt line: 다음 실행할 instruction의 주소 값

  • Memory: 실행중인 프로그램이 로드되는 영역, OS & Process가 올라감

  • I/O device: 입출력장치, Disk, keyboard, monitor... 등이 있음

  • timer: 특정 프로그램이 무한정 CPU를 점유할 수 없도록 세팅된 일정 시간 후 CPU를 반납하여 OS에 제어권이 넘어가도록 하기 위해 Interrupt를 거는 장치

  • device controller: 작은 CPU, I/O 장치의 입출력 과정에서 필요한 데이터 저장 및 연산 과정을 자체적으로 처리, 제어 정보를 위한 control register, status register, local buffer를 가짐, I/O가 끝났을 경우 interrupt로 CPU에 그 사실을 알림, CPU는 Memory나 I/O device의 저장장치 모두에 접근 가능함

    • device driver(장치구동기): OS 코드 중 각 장치별 처리루틴(SW), CPU가 Device를 구동시키기 위해 실행해야할 코드를 담은 것, Device가 실제로 수행해야 하는 작업들에 대한 코드는 firm ware에 담겨 있음
    • device controller(장치제어기): 각 장치를 통제하는 일종의 작은 CPU(HW)

  • DMA(direct memory access) controller: I/O 장치에게 요청된 입출력 동작을 수행하고, 수행이 종료됐음을 Process에게 알려야 하는데, byte 단위로 수시로 결과에 대한 interrupt를 하면 CPU에 Overhead가 발생할 수 있기 때문에, block이나 page 단위로 처리한 후 interrupt를 걸게 됨, DMA controller는 이 입출력 수행 및 memory에 결과 반영 작업까지 수행한 후에 CPU에게 interrupt를 통해 작업이 완료됐음을 알리는 역할을 수행함(CPU와 더불어 Memory에 접근 가능한 장치)

  • memory controller: CPU와 DMA가 동시에 Memory에 접근해 작업할 경우 발생할 수 있는 문제를 방지하고 조율함

  • Interrupt: 인터럽트 당한 시점의 레지스터와 program counter를 save 한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다, CPU에게 특정 작업에 대해 요청을 하기 위해 알리는 행위, CPU 제어권이 OS에게 넘어가고 OS가 필요한 작업을 처리하고 CPU를 재할당

    • HW에 의한 Interrupt: I/O Device가 필요한 동작의 수행이 끝났음으 알리고 해당 동작을 요청한 Process에 대한 실행 재개나 다음 작업을 수행할 수 있도록 알리는 것(보통의 Interrupt는 이것을 가리킴)
    • Trap: SW에 의한 Interrupt로 사용자의 Program이 O.S에게만 권한이 있는 행위(특권행동)을 요청하기 위해 CPU에게 알리는 것
      1.Exception에 의한 것 2.System call 두 종류가 존재

  • 인터럽트 관련 용어

    • 인터럽트 벡터: 기기마다 인터럽트를 처리하는 방법이 다른데 이 루틴에 대한 주소를 가지고 있음
    • 인터럽트 처리 루틴: 기기마다 인터럽트를 처리하기 위해 정의해 놓은 O.S 상의 함수
  • Instruction: CPU가 Process를 동작시킬 때 읽는 기계어, 연산 및 메모리 버퍼 등 HW 컴퓨팅 기능을 사용하기 위해 작성된 비트로 이루어진 기계어


  • 입출력(I/O)의 수행

    • 모든 입출력 명령은 특권 명령
    • 사용자 프로그램은 운영체제에게 I/O를 요청함(System Call) -> Interrupt를 직접 요청
    • trap을 사용하여 인터럽트 백터의 특정 위치로 이동
    • 제어권이 인터럽트 백터가 가리키는 인터럽트 서비스 루틴으로 이동
    • 올바른 I/O 요청인지 확인 후 I/O 수행
    • I/O 완료 시 제어권을 시스템콜 다음 명령으로 옮김

  • 의문점 정리

  1. CPU랑 device controller 차이가 뭐지, device controller도 연산장치야?

    • device controller도 연산장치이지만 특정 기기 전용 연산 및 제어를 수행하고, 중앙 시스템과의 데이터 전송 등의 인터페이스를 제공하는 장치라고 보면 됨

  2. Interrupt를 걸면 무조건 일단 제어권이 O.S에게 넘어가고 나서 다음 작업을 실행하나 아니며 바로 다른 프로그램으로 실행이 넘어갈 수도 있나?

    • CPU가 interrupt를 체크하는 과정은 다음과 같다. CPU의 instruction이 끝나고 나면 interrupt line 체크하는 데 이 때 interrupt가 있으면 cpu 제어권이 사용자 프로그램으로부터 자동으로 OS로 넘어가게 된다. 만약 timer에 세팅된 시간이 다 끝나게 되어 interrupt가 걸렸다면 이도 마찬가지로 CPU가 OS로 그 소유권이 넘어간다.(CPU 소유권에 대한 것은 추후에 설명) OS가 CPU를 사용자 프로그램에게 줄 땐 자유롭게 주지만 한 번 넘어가면 뺏을 수 없다.

  3. 사용자 프로그램이 O.S에게 특정 작업을 요청할 때 그 요청 관련 코드는 그럼 O.S가 사용자 프로그램에 접근해서 읽는거임??
    - System call은 O.S를 구동시키기 위한 함수를 호출하는 것으로 사용자 프로그램과 O.S를 연결하는 interface 역할을 함. 사용자 프로그램에서는 단지 고급언어를 통해 O.S에게 필요한 것을 요청하는 것 뿐. 어떻게 시스템 콜이 동작할지는 O.S에 다 정의되어 있음. O.S가 사용자 프로그램의 코드를 읽을 일이 없음.


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

    참고:
    https://higunnew.tistory.com/18#:~:text=Device%20driver%EB%8F%84%20%EB%B3%B8%EC%9D%B8%EC%9D%B4,%EC%9D%BC%EC%9D%84%20%ED%95%98%EB%8A%94%20%EA%B8%B0%EA%B3%84%EC%9D%B4%EB%8B%A4.

profile
Hello World

0개의 댓글