[OS] 컴퓨터 시스템 구조(System Structure) 1

동동·2022년 4월 1일
post-thumbnail

  • Memory : CPU의 작업 공간
  • mode bit : CPU가 OS에게 있는지 사용자 프로그램에게 있는지 확인해 주는 장치
  • timer : 특정 프로그램이 CPU를 독점하는 것을 막기 위한 장치
  • Interrupt line :
  • DMA controller :
  • device controller :
  • local buffer : 각 I/O 장치에 있는 register라고 할 수 있음

🛠 mode bit란?

CPU가 운영체제에게 있는지 사용자 프로그램에 있는지 알려주며 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 OS에 피해가 가지 않도록 하는 장치이다.
  • 사용자 모드 : CPU가 사용자 프로그램을 실행 중일 때 mode bit는 1이다.
  • 모니터 모드(=커널 모드, 시스템 모드) : CPU가 OS 코드를 수행 중일 때는 mode bit가 0이다.
  • I/O에 접근하는 작업은 mode bit이 0일 때만 할 수 있다. 즉, CPU를 OS가 가지고 있을 때만 접근할 수 있다.
  • 사용자 프로그램이 OS에 접근하려 하거나 잘못된 명령어를 수행하려 하면 Instruction set에서 그것을 감지하고 Interrupt를 발생시킨다. 이 때 발생하는 Interrupt는 Hardware Interrupt이다. 이런 Inteerupt 또는 Exception 발생시 하드웨어가 mode bit를 0으로 바꾼다.

🛠 timer란?

정해진 시간이 지나면 CPU의 제어권이 사용자 프로그램에서 OS로 넘어가도록 인터럽트를 발생시킨다.
즉, 특정 프로그램이 CPU를 독점하는 것을 막기 위한 장치이다.
  • 타이머는 매 클럭 틱 때마다 1씩 감소한다.
  • time sharing을 구현하기 위한 장치이다.
  • 현재 시간을 계산하기 위해서도 사용된다.

🛠 DMA(Direct Memory Access) Controller란?

메모리에 직접 접근할 수 있는건 CPU 뿐이다. Device Controller들은 메모리에 직접 접근할 수 없다.(수 많은 I/O작업들이 발생할 때마다 로컬버퍼로 부터 인터럽트가 들어오게 됨.) 그렇다 보니 CPU가 비효율적으로 쓰이기 때문에 CPU 대신 따로 메모리에 접근할 수 있는 권한을 가진 장치이다.
CPU 대신 인터럽트 명령을 수행하고 CPU에게는 단 한번의 인터럽트를 보낸다.

🛠 Memory Controller란?

CPU / DMA controller 메모리에 접근할 수 있는 장치가 두개이기 때문에 충돌이 발생할 수 있다. 이런 것을 중재하기 위한 장치.

인스트럭션을 실행하다가 인터럽트 라인 확인하고 다시 작업

CPU가 한 번 사용자 프로그램에 권한(?)을 주면 다시 뺐을 수 없음
왜냐하면 OS가 CPU를 사용하고 있지 않기 때문에

사용자 프로그램인 I/O 디바이스에 직접적으로 접근할 수 없다. -> 보안 문제 상
OS를 통해서만 접근 가능

사용자 프로그램이 I/O디바이스로 부터 입출력을 받아야함 -> CPU는 해당 사용자 프로그램 외에 다른 프로그램을 돌림 -> I/O 디바이스의 로컬 버퍼에 입력 값이 받아짐 / 로컬버퍼가 CPU에게 인터럽트를 건다 -> CPU는 인터럽트를 감지하고 해당 사용자 프로그램에 I/O 디바이스로부터 입력받은 값을 복사해준다. 그리고 다시 아까 작업하던 사용자 프로그램을 돌린다... 보통(타임머가 남아있을 때)

PC(Program counter)는 메모리 위의 작업 중에서 CPU가 다음에 무엇을 처리해야하는지 알고 있음
CPU는 본인이 이번에 실행해야할 인스트럽션 메모리 주소를 레지스터중에 프로그램카운터라는 레지스터가 다음에 무슨 인스트럽션을 실행해야하는지 메모리 주소를 지니고 있음

디바이스 드라이버 - CPU가 I/O 디바이스를 실행하기 위한 코드를 담고 있는 드라이버
디바이스 펌웨어
CPU는 매뉴얼에 적힌 대로 일을 함 이런 CPU를 제어하는 것이 운영체제

CPU가 I/O 디바이스를 사용하기 위해 운영체제에게 부탁하는 것을 시스템콜(system call)이라고 부른다.
CPU에서 인스트럽션을 순차적으로 처리하다가 함수호출이나 어떤 제어구조에 해당하는 것을 만나면 인스트럭션의 메모리 구조를 점프한다.

사용자 프로그램이 CPU한테 시스템콜하는 방법은 마치 디바이스 컨트롤러가 CPU에게 인터럽트를 거는 것과 같다. 사용자 프로그램은 만약 I/O가 필요할 경우 운영체제에 직접적으로 주소 이동을 하지 못하기 때문에 일단 CPU에게 시스템콜을 건다.

운영체제는 시스템콜을 받으면 trap을 사용하여 인터럽트 벡터의 특정 위치로 이동한다그리고 올바른 I/O 요청인지 확인 후 I/O를 수행한다. I/O가 완료되면 제어권을 시스템콜 다음 명령으로 옮긴다.

I/O를 수행할 때 발생하는 인터럽트는 소프트웨어 인터럽트인가? 하드웨어 인터럽트인가?
-> 둘 다. I/O를 요청할 때 발생하는 인터럽트는 소프트웨어 인터럽트이고 I/O를 다 수행하고 발생하는 인터럽트는 하드웨어 인터럽트이다.

운영체제는 CPU를 사용할 일이 없고 인터럽트가 들어올 때만 CPU가 운영체제로 넘어간다.
-> 현대의 운영체제는 인터럽트에 의해 구동된다고 볼 수 있다.

인터럽트 관련 용어
-> 인터럽트 벡터
해당 인터럽트의 처리 루틴 주소를 가지고 있음

-> 인터럽트 처리 루틴
실제 인터럽트를 처리하는 커널 함수

명령어 - 기계어 - 인스트럭션 인스트럭션 하나는 보통 4bit

강의에서는 인터럽트를 크게 두 가지 하드웨어에서 보내는 인터럽트 / 소프트웨어에서 보내는 인터럽트로 구분했지만 더 찾아보니 외부 인터럽트 / 내부 인터럽트로 구분하기도 했다.
하드웨어 인터럽트는 또 크게 두 가지로 나눌 수 있는데

profile
괴발개발

0개의 댓글