System Structure & Program Execution 1

ChoiYongHyeun·2023년 11월 23일
0

운영체제

목록 보기
2/16
post-thumbnail

강의 링크

컴퓨터 시스템 구조

Computer

CPU : 매 쿨럭마다 memory 에 담긴 작업을 실행함

- register:memory 보다 빠르면서 작은 작업 공간
- mode bit : CPU 에서 실행되는 것이 OS 인지 사용자 프로그램인지를 구분하는 자료
- interrupt line : CPU 는 항상 memory 에 있는 instruction 을 시행한다. (memory에서 실행해야 하는 주소값을 받아 시행)
이 때 memory 에서 작업을 하던 중 I/O device 의 명령이 들어왔을 때 수행 할 수 있도록 , I/O device 와 접근 가능하게 만드는 line

CPU는 memory에 담긴 프로그램들에게만 할당되며 프로그램은 시간적 제약을 갖는다.

CPU 는 반복적으로 memory 에 담긴 프로그램들에게 할당 되며 각 프로그램들은 실행 될 수 있는 시간적 제약이 존재한다. 이러한 시간적 제약은 timer 에 의해 규제 되며 보통 몇 십 ms 정도의 시간동안 실행 될 수 있다.
프로그램 별로 시간 제약이 존재하는 이유는 특정 프로그램이 CPU 를 독점하여 다른 프로그램이 실행되지 않는 것을 방지하기 위함이다.

만약 메모리에 OS , 프로그램 A , 프로그램 B 이 존재한다고 해보자. 프로그램 A가 무한 반복문이라 무한하게 반복되는 프로그램이라면 프로그램 A만 무한하게 실행하는 것이 아니라, timer 에 설정된 시간 이상으로 프로그램 A 가 실행 될 경우 `interrupt line 에 신호를 주게 된다.

interrupt line 에 신호가 오면 CPU프로그램 A 의 작업을 멈추고 CPUOS 에 할당한다. 이후 다음 프로그램인 프로그램 B 의 작업을 시행하고 다시 이전에 못끝낸 작업인 프로그램 A 에게 할당되는 시스템이다.

프로그램들은 I/O device 에 접근 할 수 없으며 오로지 OS 만이 I/O device 에 접근 할 수 있다.

이전에 말했듯 I/O device 의 속도는 CPU 에 비하면 너무나도 속도가 느리다.
만약 memory 에 있는 프로그램들이 순차적으로 실행되던 도중 I/O device 에 명령을 내렸다고 가정하자. 프로그램 A를 실행하는 동안 내가 키보드를 입력한 상황이다.

그러면 키보드에서 입력된 장치는 키보드의 local buffer 안에 신호를 담는다.
신호가 담기는 동안 CPUI/O device 의 작업과 무관하게 계속 memory 에 담긴 프로그램 의 작업을들 시행하고 있다.

이후 local bufferI/O device 의 입력이 들어온다면 device controllerinterrupt line에 신호를 주게 되며 interrupt line 이 실행되었기 때문에 CPUOS 에게 할당된다.

OSinterrupt line 에 신호가 왔기 때문에 그 이유를 살펴보고 , 이것이 프로그램 A 에서 키보드 입력이 들어왔음을 알기 때문에 키보드 입력에 대한 신호를 프로그램 A 메모리에 넣은 상태로 다시 프로그램 들이 실행된다.

mode bit은 현재 CPUOS 에게 할당되었다면 0 , 사용자 프로그램 에게 할당되었다면 1 을 표시한다.

mode bit 은 보안상의 문제로 0일 때는 모든 접근이 가능하다.
하지만 1일 때는 모든 접근이 불가하며, 제한되어 있는 접근만 할 수 있도록 한다.

그러니 OS에게 CPU 가 넘어갈 때에는 mode bit0 , 프로그램 에게 넘어갈 때에는 mode bit1 로 설정된다.

memory : CPU 의 작업 공간

- `CPU` 는 매 순간(쿨럭) `memory` 에서 기계어를 읽어서 작업을 수행하게 된다. 

DMA controller (Direct Memory Access)

I/O device 에 신호가 들어올 때 마다 local buffer -> intterrupt line -> OS -> 신호 copy 하게 되면 CPU 가 일을 하려고 하면 계속 interrupt 가 걸려서 효율적이지 못하다.
이 때 DMA controller 를 두게 되면 DMA conttroller 가 직접 local buffer에 있는 데이터를 memorydirect 로 접근하여 작업을 할당한다.
이후 interrupt 를 한 번 걸어 CPU 에게 제가 local buffer 에 있는 내용을 모두 걸었어요 라는 신호를 보낸다.

Memory controller

CPU가 접근하려는 프로그램과 DMA 가 접근하려는 프로그램이 겹칠 경우 문제가 발생 할 수 있기 때문에 memory controller 가 어떤 기기가 먼저 memory 에 접근 할지를 결정한다.

I/O device

  • I/O device : deviceinput 을 보내거나 (키보드), output 을 받는 (모니터 , 프린터기)는 device
    - Hard Disk보조 기억장치 로 disk 에 정보를 받거나, 보내는 장치
  • 이런 각각의 I/O device 는 마치 CPU 역할을 하는 것과 같은 device controller 를 갖게 된다. (device controller 는 하드웨어 ! )
    - 이 때 device controller에 접근 할 수 있게 만드는 software 가 필요한데 그게 바로 device driver (프린터기를 설치하면 프린터기 프로그램을 설치하는 것과 같음)
  • I/O device 의 내부를 통제하는 것은 CPU 가 아닌 개별의 device controller 가 맡게 된다. (작은 cpu 역할)
    - 제어 정보를 위한 register : CPU 에 의해서 얻은 명령을 시행 할 수 있는 register
  • I/O device 들 또한 자기들만의 데이터를 저장 할 수 있는 작업 공간이 필요하며 이런 작업 공간을 local buffer 라고 한다.

Interrupt

  • Interrupt : 하드웨어 인터럽트 : 하드웨어가 발생시킨 인터럽트
  • Trap : 소프트웨어 인터럽트
    - Exception : 프로그램이 오류를 범한 경우
    • System call : 프로그램이 커널 함수를 호출하는 경우
  • OS 는 올바른 I/O 요청인지를 확인하고 수행한다.
    - 권한이 있는지 ?
  • I/O 완료 시 제어권을 시스템콜 다음 명령으로 옮긴다.

현대의 운영체제는 인터럽트에 의해 구동된다.

CPU 는 인터럽트가 없다면 OS 에 접근하지 않고 사용자 프로그램만을 작동한다.
많은 작업들이 시행 될 때 마다 인터럽트가 발생하고 OS 에서 해당 작업을 명령하고 프로그램에서 작업이 실행됨

I/O device 에 접근하는 것은 OS 만을 이용해서 접근 할 수 있는 특권 명령이라고 하였다. 그럼 어떻게 I/O 를 할까 ?

  1. 사용자 프로그램이 운영체제에게 I/O 에 접근하라고 명령을 보낸다 -> system call
  2. system call 이 발생하면 interrupt line 에 신호를 보내고 mode bit : 0 , OS 에게 CPU 를 할당한다.
  3. OSdevice controller 에게 명령을 한다.

Interrupt 정리

  1. 프로그램이 I/O 에 접근하려면 System call 을 보내 소프트웨어 인터럽트
  2. OSdevice driver 를 통해 device controller 에게 명령을 시킴
  3. 명령을 보낸 후 CPUmemory 에 있는 프로그램 들을 열심히 실행함
  4. 명령을 받은 I/O device 의 수행이 끝났다면 작업물을 local buffer에 담음
  5. local buffer 에 작업이 찼을 경우 device controller하드웨어 인터럽트 를 실행함

인터럽트 관련 용어

다양한 인터럽트 별로 해야 하는 일들이 다르다.

  • 인터럽트 처리 루틴 (Interrupt Service Routine, 인터럽트 핸들러)
    - 해당 인터럽트를 처리하는 커널
  • 인터럽트 벡터
    - 인터럽트 종류 별로 어디에 있는 함수를 실행애햐 하는지, 함수의 주소를 정의해둔 일종의 테이블

정리

  1. CPUmemory 에 담긴 작업들만을 수행함
  2. memory 에는 OS사용자 프로그램이 담아져있으며 사용자 프로그램CPU에 할당될 수 있는 시간의 규제가 존재함 (timer)
  3. interrupt line 이 존재하며 interrupt line 에 인터럽트가 들어올 경우 CPUOS 에게 할당되며 , OS 는 어떤 이유로 interrupt 가 발생했는지 확인 후 다시 프로그램에게 할당됨
  4. 프로그램timer 이상 CPU를 할당했을 경우 interrupt line에 신호를 보냄
    4.1 CPUOS 에게 할당되며 timer 에 의한 interrupt 임을 인지하면 다음 프로그램에게 할당됨
  5. 보안상의 이유로 I/O device 에는 OS 만 접근 가능하며 프로그램은 제한된 접근만이 가능함 (OS 가 접근하는 명령을 특권명령 이라고 지칭함)
  6. 프로그램I/O device에 접근하고자 한다면 interrupt line 에 접근하고자 하는 명령을 담은 interrupt 를 보냄 -> 소프트 웨어 인터럽트 (system call)
    6.1 OS 는 해당 interrupt 를 보고 device driver를 통해 device controller에게 명령을 보냄
    6.2 CPUI/O devicelocal buffer 에 작업이 완료 될 때 까지 프로그램들에게 할당됨
    6.3 local buffer 에 명령 받은 작업이 담기면 device controllerinterrupt line 에 작업이 완료 되었다며 interrupt 를 보내고 OS 는 해당 interrupt 를 해석하여 system call 을 보낸 프로그램의 메모리에 해당 작업 내용을 담은 주소를 담음
  7. I/O device 에 접근 할 때 마다 interupt line에 인터럽트를 보내면 CPU 가 일을 열심히 하지 못하니 DMA (Direct Memory Access) 를 통해 local buffer 에 담긴 내용물을 memory 내부의 프로그램 에 직접 담음
    7.1 DMAmemory controller 에 의해 관리됨
  8. interrupt 별로 루틴이 필요하기 때문에 이를 ISR (interrupt service routine) 으로 관리하며 루틴 별 함수에 대한 정보를 Interrupt vector 를 통해 관리함
profile
빨리 가는 유일한 방법은 제대로 가는 것이다

0개의 댓글

관련 채용 정보