[반효경 운영체제 학습] 04

선을로·2023년 1월 31일
0

컴퓨터시스템의 구조

컴퓨터 내부: CPU,메모리 등
컴퓨터 외부: 모니터,키보드 등 입출력(IO)장치

  • 컴퓨터 전원을 켜면,
    운영체제가 메모리에 상주하면서 실행되고 있고,
  • 프로그램을 실행시키면,
    해당 프로그램이 메모리에 올라가서 프로세스가 된다.
  • (다시 설명하지만) IO장치에는 작은 CPU같은 존재로 '디바이스 컨트롤러'가 있다. ex) 키보드 컨트롤러, 디스크 컨트롤러 이런식으로 이름이 붙음(그림에서는 IO장치에 붙어있는 동그라미)
  • CPU가 연산을 하려면 작업공간이 필요하고 그 작업공간이 메모리다.
  • 메모리도 디바이스이기에 이것을 전담하는 메모리 컨트롤러가 있다.
  • IO장치의 컨트롤러들도 작업공간이 있다.
    일종의 작은 메모리 같은 건데(그림에서는 IO장치에 붙어있는 사각형)
    로컬 버퍼(local buffer)라 부른다.
  • CPU에서 기계어를 매번 실행하고 있을텐데,
    그 기계어는 메모리 어딘가에 있는 기계어.
    크게 운영체제 위치에 있는 기계어를 실행하거나,
    사용자 프로그램의 기계어를 실행할 때로 2가지로 구분된다함.
  • CPU가 운영체제를 실행하는 것은 뭐든 지 상관없다함.
    운영체제는 컴퓨터를 관리하기 위한 것이기 때문에 믿고 맡길 수 있는데
    (물론 버그 발생 가능성은 있음)
    사용자 프로그램은 위험할 수 있다.
    CPU가 사용자 프로그램에게 넘어가면,운영체제는 그것을 제어할 수 없다함.
    왜냐면 운영체제도 기계어를 CPU가 읽어줄 때 사용되는 것이고,
    사용자 프로그램도 마찬가지이기에..
  • 그래서 CPU에서 기계어를 실행할 때,
    운영체제랑 사용자 프로그램 둘 중에 어느 프로그램을 실행하는 건 지 구분해주는게 mode bit

Mode bit

  • CPU가 운영체제 프로그램을 실행 중일 때는 mode bit이 0으로 되어있다. CPU가 아무거나 해도 상관없는 상태.
  • 운영체제가 CPU를 사용자 프로그램에게 넘겨줄 때,
    mode bit을 1로 바꿔준다함.
  • 특권명령: 위험할 수 있는 기계어로 mode bit이 0일 때만 실행 할 수 있다. mode bit이 1일 때는 실행 못함.
  • 만약 사용자 프로그램이 특권명령에 해당하는 불순한 기계어를 실행하려하면 CPU쪽에서 mode bit가 아직 1인데 특권명령이 왔으므로,
    자동적으로 CPU 사용권을 운영체제 쪽에 준다함.
    이렇게 운영체제 쪽으로 사용권을 넘기는 방법은
    Interrupt 와 Exception 이 있다.
  • Exception: 권한이 없는 기계어를 실행하면 mode bit 0으로 바뀌면서 CPU가 운영체제에게 넘어간다.
  • Interrupt: CPU에는 Interrupt Line 이라는 것이 있는데,
    매순간 메모리에서 기계어를 하나씩 읽어서 실행한 다음에
    다음 기계어를 실행하기에 앞서서
    혹시 Interrupt Line에 interrupt 들어온게 있는 지 체크 한다함.
    인터럽트는 입출력 장치들이 담당한다함.
  • (다시 설명하지만)예를 들어 프로그램A가 어떤 프로그램을 실행하다가 디스크에서 어떤 파일을 읽어와야한다 하면 CPU가 직접 디스크를 읽는 것이 아니고, 디스크 컨트롤러에게 파일을 읽어달라고 요청을 하고.
    디스크 컨트롤러가 파일을 읽는 동안 CPU는 운영체제를 한번 통과하고.
    다른 프로그램에게 넘어감.
    디스크 컨트롤러가 파일을 다 읽으면 CPU에게 알려줘야함.
    디스크 컨트롤러가 CPU에게 인터럽트를 걸어서 알려줌.
    그럼 CPU는 읽고있던 기계어를 읽고나서
    다음 기계어를 읽기전에 인터럽트 들어온 것을 확인하고
    CPU는 자동적으로 운영체제로 넘어간다함.
    그러면 mode bit이 0으로 바뀌고,
    운영체제가 CPU를 잡아서 그 인터럽트에 대응하는 일을 수행한다.
    방금처럼 디스크 파일을 다 읽었다는 인터럽트가 들어왔다면,
    운영체제는 읽어온 파일을 사용자에게 넘겨줘서
    사용자가 그 파일의 내용을 메모리에 올려놓고
    CPU를 얻을 수 있게 해주는 일을 수행한다.
  • CPU 안에 register들이 있는데,
    CPU가 기계어 연산을 하기 위해 하는 연산의 인풋,아웃풋을 저장하기 위한
    (메모리 같은 느낌)아주 작은 크기에 서로 붙어있는 존재임.

  • 프로그램 카운터(PC): register 종류 중의 하나인데,
    메모리의 주소를 가지고 있다함.
    다음번에 실행할 기계어의 메모리 주소를 가지고 있는 레지스터라함.
    예를 들어

    프로그램 카운터가 OS를 가리키고 있으면 운영체제의 기계어를 실행중인거고,
    프로그램 카운터가 사용자 프로그램A를 가리키고 있으면 CPU는 사용자 프로그램A의 기계어를 실행중인 것

  • 만약 특정 프로그램이 무한루프를 사용해서 CPU에서 쓸데없는 기계어를 무한으로 반복하고 있다면,
    CPU에게서 사용권을 뺏어오는 건 운영체제 혼자 할 수 없다함.
    운영체제는 CPU를 넘겨주는 것은 할 수 있지만,
    다른 프로그램이 CPU를 사용하고 있으면 뺏어오기 어렵다.

Timer

  • Timer: 이러한 CPU 독점을 막기 위한 부가적인 하드웨어이다.
    timer는 일정시간 간격으로 인터럽트를 발생시킨다함.
  • Timer Interrupt: timer가 발생시키는 인터럽트
  • 운영체제가 사용자 프로그램에게 CPU를 넘길 때,
    그냥 넘겨주는게 아니라 Timer에게 시간을 셋팅한 다음에 넘겨준다함.
  • 일정시간 이상 지나면 타이머가 CPU에게 인터럽트를 걸기 때문에
    독점되는 현상을 막을 수 있다.
    CPU의 제어권이 자동적으로 운영체제에게 넘어온다.
  • CPU의 독점을 막기 위해서 사용하는 하드웨어
  • 현대 운영체제가 CPU스케쥴링을 할 때는 타이머의 도움을 받아서 CPU를 강제로 빼앗아 올 수 있는 방식으로 운영한다함.

0개의 댓글