[운영체제] 컴퓨터 시스템의 구조 2

ryun·2023년 3월 21일
0

운영체제

목록 보기
4/17

컴퓨터 시스템은 무엇이고 그 위에서 프로그램이 어떻게 돌아갈까?


📍 컴퓨터 시스템 구조

  • CPU와 메모리로 구성된 컴퓨터 내부와 I/O장치로 구성된 컴퓨터 외부로 구성

  • 전원키면 운영체제가 메모리에 항상 상주 (그림에서 흰색)

  • 프로그램 실행시키면 프로그램이 메모리에 올라가서 프로세스가 된다 (그림에서 메모리 내 분홍, 파랑색)

  • 각각의 작은 I/O컨트롤러도 작업공간이 있다

    • 일종의 메모리 같은 것
    • 로컬 버퍼
  • CPU에서는 두 가지의 기계어 계속 실행

    • 운영체제의 기계어
    • 사용자 프로그램의 기계어

CPU가 운영체제에 의해 실행될 때는 믿고 맡길 수 있다
하지만, 운영체제가 사용자 프로그램이 CPU를 사용할 때는 악의적일 수도 있다 (무한루프, 메모리 무한히 쓰도록 하는 등)
CPU가 사용자 프로그램에게 넘어가면 운영체제가 제어할 수 없다
따라서, CPU에서 기계어 실행할 때 운영체제가 실행하는지, 사용자 프로그램이 실행하는것인지 구분하는 것이 필요하다

📍 Mode bit

프로그램 및 운영체제의 보호장치

  • 모드빗 1
    • 사용자 프로그램 수행
    • 제한된 기계어만 실행
    • 위험한 기계어는 실행 못하게 한다
  • 모드빗 0
    • 특권 명령(위험한 명령)까지도 실행 가능

💡 CPU가 운영체제한테 넘어가는 상황 (모드빗이 변경되는 상황)

  1. 기계어 실행 전, 특권 명령 && 모드빗이 0 인지 먼저 판단한다
    불순한 것이 확인되면 자동적으로 CPU가 운영체제한테 넘어간다 (모드빗 1에서 0)

  2. 인터럽트 / 익셉션
    CPU가 다음 기계어 실행하기 앞서서 인터럽트 라인에 들어온 시그널 확인한다
    인터럽트는 I/O 기계들이 발생시킬 수 있다
    인터럽트가 오면 자동적으로 운영체제로 넘어간다 (모드빗 1에서 0)

📍 프로그램 카운터

CPU는 기계어로 연산하는데, 연산에 인풋과 아웃풋을 저장하기 위한 빠르고 작은 레지스터가 붙어 있다
프로그램 카운터는 레지스터 중 하나

  • 프로그램 카운터
    • 다음번에 사용할 기계어의 메모리의 주소를 가지고 있다
    • 프로그램 카운터가 흰색을 가리키면 운영체제 실행중
    • 프로그램을 가리키면 프로그램 A가 실행중

📍 타이머

타이머는 씨피유의 독점을 막기위해 사용하는 부가적인 하드웨어

CPU 뺏어오는 방법은 운영체제 혼자할 수 없다
따라서 일정 시간 간격으로 인터럽트를 발생시키는 타이머를 사용할 수 있다
시간 세팅한 타이머를 통해 CPU 제어권을 자동으로 운영체제한테 넘긴다

  • CPU를 짧은 시간 간격으로 나누어서 쓸 수 있게 한다
  • 현대 운영체제에서 CPU 스케줄링을 할 때는 타이머의 도움을 받아 CPU를 강제로 빼앗아 올 수 있게 한다

타이머 실행 흐름

인터럽트 들어옴 >
프로그램 카운터는 운영체제 가리킴 >
자동적으로 모드빗이 0으로 바뀜 (모든 기계어 다 실행가능) >
다른 프로그램에게 CPU 넘겨줌 >
모드빗을 1로 바꾸어서 제한된 기계어만 실행가능 >
타이머 인터럽트 들어옴 >
CPU 제어권이 운영체제로 넘어가서 CPU를 다른 프로그램에게 넘겨줌 >
파일 읽어와야 된다면 디스크 전담 컨트롤러에게 요청(특권명령 기계어)
*모든 I/O 장치에 접근하는 기계어는 전부 특권명령으로 묶여있다(= 즉, 사용자 프로그램을 가지고 있으면서 아이오 장치에 접근할 수가 없다)

📍 시스템 콜

사용자 프로그램이 뭘 하고 싶은데 권한이 없을 때 운영체제에게 부탁하는 것

사용자 프로그램에서 기계어가 실행되다가 운영체제 기계어 실행으로 점프가 필요

인터럽트 라인에 인터럽트가 들어오는 방법이 있지만 인터럽트가 들어오지 않았을 때,
스스로 사용자 프로그램이 인터럽트를 건다!
자신의 기계어를 통해 인터럽트 라인을 세팅

* 원래 하드웨어들이 인터럽트 거는 것 : 하드웨어 인터럽트
* 소프트웨어가 할 수 없는 작업 요청 위해 스스로 인터럽트 거는 것 : 소프트웨어 인터럽트

💡 인터럽트

  • 일반적 인터럽트는 하드웨어 인터럽트다
  • 개별 프로그램이 운영체제한테 넘기기 위한 종류는 트랩이라고 부른다
    • 프로그램이 운영체제한테 요청하고 싶은데, 가상메모리를 가로질러 바꿀 수 없기 때문에 운영체제한테 CPU를 넘기는 방법이 소프트웨어 인터럽트(권한이 없어서 모드빗 체크할 때 운영체제로 넘어가는 것 또한 소프트웨어 인터럽트로 간주, 내가 할 수 없어서 넘어가는 거니까 같은 맥락)

인터럽트 흐름

프로그램 실행중 파일 읽는것은 I/O 작업의 특권명령, 프로그램이 못함 >
프로그램이 운영체제한테 시스템 콜 >
디스크 컨트롤러한테 부탁 >
그 동안 운영체제는 다른 프로그램 기계어 실행하고 있다 >
디스크 컨트롤러가 요청한 파일을 다 읽었으면 인터럽트 건다 >
운영체제한테 넘어감 >
읽어온 파일을 메모리에 카피

키보드 컨트롤러도 위와 마찬가지


직접 못하니까 운영체제한테 시스템콜 >
원하는 키보드 인풋 들어오면 인터럽트 걸어서 운영체제한테 알려줌 >
운영체제는 그 내용을 요청한 사용자 프로그램한테 넘겨줌

📍 디바이스 컨트롤러

모든 아이오장치를 전담하는 작은 CPU

* 디바이스 컨트롤러는 하드웨어, CPU도 하드웨어
* 운영체제는 소프트웨어

* 디바이스 드라이버는 소프트웨어 : CPU가 수행하는 코드
* 디바이스 컨트롤러에서 수행되는 코드: 펌웨어 (이미 코딩되어 있는 것)

CPU가 운영체제로 넘어가는 경우?

  • 공통적으로 인터럽트 라인 세팅에 의해 넘어간다
    • 하드웨어 장치들이 인터럽트 거는 것 (요청되었던 정보 전달)
    • 프로그램이 직접 인터럽트 거는 것
      • 시스템 콜 (특권명령에 의해 수행되는 I/O 작업 실행하기 위해)
      • 트랩 (인터럽트가 아니라 하는 일의 연장이라고 볼 수 있다)
    • 익셉션을 하려고 했다던가 권한 없는 기계어 실행하려고 했다던지 할 때도 스스로 인터럽트가 걸린다

CPU가 다른 프로그램이나 운영체제로 넘어가는 경우?

  • 번갈아가며 쓰게하는 규정에 의해 뺏기는 것
    • 타이머 인터럽트
  • 더이상 쓸 의지가 없는 경우
    • 파일이 없어 다음 작업을 하지 못하는 경우 (I/O 장치에서 읽어와야함)

인터럽트 관련 용어

  • 인터럽트 벡터
    • 인터럽트 별로 실행할 코드 위치를 담고 있는 것
    • 주소에 대한 포인터
      • 타이머 걸렸을 때는 여기, 디스크는 여기
  • 인터럽트 처리 루틴
    • 갔을 때 기계어로 무슨일을 해야하는지 적혀있는 것

📍 동기식 / 비동기식 입출력

동기식

CPU에서의 작업과 I/O 요청이 싱크되는 것

I/O 요청 요청 > 인터럽트 걸어서 전달 > 작업 완료 후 결과를 보고 그 다음 스텝 진행

사용자 프로그램이 입출력 요청 필요(직접 못함) >
운영체제 커널의 디스크 드라이버 통해 디스크 컨트롤러에게 파일 읽기 요청 >
입출력 요청한 프로그램은 대기 >
작업 후 컨트롤러가 CPU에게 인터럽트 걸어서 확인 후 다음 작업 진행

  • 대기하는 동안 CPU 낭비
  • 다른 프로그램에게 CPU 넘겨줄 수도 있음
    CPU에게도 효율적 I/O장치에게도 효율적 (동시에 일할 수 있기 때문)

비동기식

CPU가 요청 > 그 다음 즉시 자기 할 일을 하는 CPU

사용자 프로그램이 입출력 요청 필요 >
결과 무관하게 CPU가 작업 진행
*결과값 얻기 전에 할 수 있는 작업들이 있음 (읽기가 아니라 쓰기 요청이면 가능)

📍 DMA

직접 메모리에 접근할 수 있는 컨트롤러
인터럽트가 너무 자주 걸리는 것을 방지할 수 있다

  • DMA 작업 끝나면 블럭 단위로 메모리를 직접 접근할 수 있는 장치를 더 두는 것이다
  • 디바이스가 읽은 내용을 CPU 인터럽트 없이 DMA 컨트롤러가 메모리에 올려놓고, CPU에 인터럽트 걸어서 한번에 알려주는 방법

분량 차면 DMA가 메모리에 카피 >
작업 끝나면 인터럽트 라인 세팅 >
바로 인터럽트가 발생하는 것보다 덜 빈번하게 발생 >
! CPU 효율적 !

📍 입출력 기계어


기계어 (= 명령어)

  • 좌측은 I/O 전담 기계어

    • 메모리 기계어 따로 I/O 기계어 따로
  • 우측은 메모리 기계어를 I/O까지 연장

    • I/O 장치에도 메인 메모리 주소를 연장해서 매겨놓고,
      실제 I/O를 메모리에 접근하는 기계어를 통해 접근
    • 메모리 접근 기계어로 I/O도 하는 것
    • 메모리 주소가 I/O 장치까지 연장해서 이어지는 것

📍 저장장치 계층구조

  • 모든 데이터들은 아래쪽에 원본이 저장되어 있고 필요할 때 위로 올려다가 쓰도록 되어 있다
  • 캐싱
    • 위에서 요청오면 아래로 내려가기 이전에 중간단계에서 올려서 속도를 빠르게 하는 법 > 재사용성 good
      (CPU가 직접하는게 아니고 I/O 컨트롤러에 접근해서 위로 올린다)
  • 위는 휘발성매체 아래는 비휘발성매체

0개의 댓글