Computer System review

주리링·2021년 8월 6일
0

운영체제

목록 보기
1/7
post-thumbnail

21-1학기 운영체제에 대해서 배운 내용들을 상기하고 기록하기 위해 글을 쓰려고 합니다.
첫 글은 OS에 대해 글을 쓰기 전에 이해를 돕기 위해서 컴퓨터 구조에 대해서 Review를 하고자 합니다.

Computer Components


위의 그림은 Top-Level View로 본 컴퓨터 구조로 크게 4가지 요소(CPU,Main Memory, I/O modules, System bus)로 구성되어 있다.

Instruction Execution

Instruction Execution은 크게 2개의 단계를 거치게 된다.
Fetch stage에서는 명령을 읽고 Execute stage에서는 실행한다.


그림에서 PC란 Program Counter로 다음에 실행할 명령의 주소가 들어있다.
AC란 Accumulator로 연산 결과 데이터를 일시적으로 저장하는 레지스터다.
IR이란 Instruction Register으로 지금 실행중인 명령어가 들어있다.
MAR이란 PC에 저장된 명령어 주소가 사용되기 전에 일시적으로 저장되는 주소 레지스터다.
MBR이란 기억장치에 저장될 데이터 혹은 읽혀진 데이터가 일시적으로 저장되는 버퍼 레지스터다.

Fetch Stage

  1. 우선 PC의 값을 MAR로 복사 후 PC의 값을 다음 실행할 명령의 주소 값으로 바꾼다.
  2. MAR의 값을 참조하여 memory를 읽은 후 명령어를 MBR에 복사한다.
  3. MBR에 저장해 둔 명령어를 IR에 복사한다.

Execute Stage

  1. IR의 명령을 분석한다. 첫 번째 예시에서는 memory에서 940에 있는 data를 가져오라는 명령이다.
  2. IR의 값을 MAR로 복사한다.
  3. MAR의 값을 참조하여 memory를 읽은 후, data값을 MBR에 복사한다.
  4. MBR의 값을 AC로 복사한다.

이와 같은 경로로 Fetch stage에서는 명령어를 가져오고 Execute stage에서는 명령어를 분석하고 실행한다.

Interrupt

Interrupt란 processor의 정상적인 순서가 방해받는 것이다.

그림에서 보면 user program1에서 I/O를 요청하고 user program2를 실행하던 도중 I/O작업이 다 끝나서 2a와 2b사이에서 CPU에 Interrupt가 발생한 것이다.
즉, Interrupt는 중단하길 원했던 부분이 아닌 곳에서 발생한다.

Interrupt stage를 추가한 Instruction Execution Cycle은 아래와 같다.

주의해야 할 점은 Fetch stage와 Execute stage에서도 Interrupt는 언제든 발생 할 수 있다.
하지만 Interrupt에 대한 처리는 Execute stage가 끝나고 Program Status Word의 Interrupt enable/disable bit를 확인해서 Interrupt가 발생했는지 확인하고 발생했다면 Interrupt stage에서 처리한다.
여기서 Interrupt Handler는 interrupt에 걸렸을 때 왜 interrupt에 걸렸는지, 어떻게 처리해야할지 결정하고 요청하는 os의 한 부분이다.

Interrupt가 처리되는 과정을 memory와 register에 대해서 자세하게 보면 아래와 같다.

a는 interrupt가 발생하여 프로그램이 실행하다가 중단이 됐을 때 register의 값을 저장하는 상황이고, b는 interrupt가 끝나고 다시 프로그램을 복원할 때의 상황이다.

a

  1. user program에서 마지막으로 Instruction 값이 PC에 있을테니, PC를 control stack에 저장한다.(N번째 Instruction이 실행중이라면 PC의 값은N+1일 것이다.)
  2. PC의 값을 Interrupt service routine의 시작주소로 변경한다.
    Interrupt service routine은 interrupt를 처리할 OS code라고 보면 된다.
  3. general register의 값들을 stack에 저장한다.
  4. stack pointer의 값을 update한다.

Interrupt service routine가 interrupt를 처리한 후, 프로그램을 다시 복원해야하므로 b의 상황이 된다.

b

  1. control stack에 저장된 값들을 CPU로 옮긴다.
  2. stack pointer의 값을 바꾼다.
  3. 다음에 실행할 Instruction으로 PC값을 바꾼다.(여기에선 N+1)

Interrupt가 처리되는 과정을 Hardware와 Software로 나눠서 보면 아래와 같다.

Hard ware

  1. interrupt가 발생해서 PSW의 값을 바꾼다.
  2. cpu에서 실행중인 명령을 끝까지 실행한다.
  3. cpu가 psw를 보고 interrupt가 발생했는지 확인한다.
  4. control stack에 psw+pc의 값을 넣는다.
  5. interrupt service routine의 시작주소를 pc에 넣는다.

Soft ware

  1. control stack에 register값을 넣는다.
  2. interrupt를 처리한다.
  3. control stack에 있는 psi값을 복원한다.
  4. psw와 pc값을 복원한다.

Memory Hierarchy


용량이 커질수록 access time도 커지고 cost per bit는 낮아진다.
main memory와 CPU사이에 존재하는 cache memory는 OS에서 관리하는게 아니므로 빠르다.

잘못된 점이나 지적할 부분이 있다면 언제든 환영입니다!

profile
코딩하는 감자

0개의 댓글