하나 혹은 여러개의 CPU, device controller들은 공유 메모리에 접근가능한 common bus에 연결됩니다
CPU와 devices 들이 동시에 실행된 경우 메모리 사이클을 위해 경쟁하게 됩니다.
(BUS를 사용하기 위한 경쟁.)
Bus
Bus는 3개의 버스로 이루어져 있습니다.
-address bus :주소를 옮기는 버스
-data bus :데이터를 옮기는 버스
-control bus :데이터를 쓸건지 가져올건지 등의 조작을 전달하는 버스
(참고: 32bit 아키텍쳐 등을 이야기할 때 32비트는 한번에 처리할 수 있는 데이터의 양, register의 크기, bus의 크기가 모두 32bit라는것임. 합쳐서 32비트가 아니라 각각이 32비트..
address bus가 32bit면 2^32개의 주소를 표현할 수 있음. 2^32=4기가)
device: 마우스,키보드 등 기기 그 자체
-char형 디바이스: 1byte단위로 사용됨. 마우스,키보드 등
-block형 디바이스: char들이 모인 뭉탱이로 사용됨. HDD, 프린터 등, 여기에는 buffer가 있음
device controller: 기기 HW를 컨트롤할 수 있음
device driver: device controller를 움직이게 하는 소프트웨어
(디바이스 드라이버는 하드웨어 디바이스를 컴퓨터 시스템에 등록하고, 디바이스와 상호 작용할 수 있는 인터페이스를 제공하는 소프트웨어이며, 디바이스 컨트롤러는 하드웨어 디바이스와 컴퓨터 시스템 간의 인터페이스 역할을 수행하는 하드웨어입니다.)
CPU와 I/O 디바이스는 병렬적으로 실행할 수 있다.
CPU는 메인메모리와 로컬버퍼로 데이터를 전달할 수 있다.
I/O는 디바이스에서 컨트롤러의 로컬버퍼로 데이터를 전달할 수 있다.
디바이스 컨트롤러:
각 디바이스 컨트롤러는 일반적으로 버퍼를 가짐(block형 디바이스의 경우)
디바이스 컨트롤러는 작동이 완료되었을 때 CPU에게 끝났다는것을 알림. 이것이 interrupt임.
[SW] --signal-- [OS] --interrupt--[HW]
소프트웨어와 운영체제 간에는 시그널로, OS와 HW간에는 인터럽트로 신호를 보냄.
인터럽트는!!
인터럽트가 발생하면.. 인터럽트 벡터(interrupt vector)를 본다. 인터럽트 벡터 안에는 ISR(Interrupt Service Routine)코드의 주소가있어서,
해당 벡터 값을 따라 가서 ISR을 보고, 그 루틴 코드를 실행하고 돌아온다.
인터럽트 구조는, interrupt된 명령어의 주소를 저장한다.(그래야 인터럽트 서비스 루틴 실행하고 원래 명령어로 돌아올 수 있으니까)
incoming interrupts are disabled while another interrupt is being processed to prevent a lost interrupt
현재 처리중인 인터럽트가 완료될 때까지 새로운 인터럽트가 발생하지 않도록 막아야 한다. 이를 통해 중요한 처리가 누락되지 않도록 한다.
별개로 중첩 인터럽트 방식을 사용할 수 있다.
그러나, 인터럽트 처리 중에 다른 인터럽트가 발생하면, 현재 처리 중인 인터럽트가 중단되고, 다른 인터럽트가 실행될 수 있습니다. 이 경우, 현재 처리 중인 인터럽트의 상태 정보는 스택 메모리에 저장되어 있으며, 다른 인터럽트 처리가 끝난 후에 다시 복원됩니다.
하지만, 이러한 중첩 인터럽트 처리에서 인터럽트가 계속해서 발생하게 되면, 시스템의 처리 능력이 저하될 수 있습니다. 따라서 일부 시스템에서는 중첩 인터럽트 처리를 제한하고, 현재 처리 중인 인터럽트가 완료될 때까지 다른 인터럽트가 발생하지 않도록 막습니다. 이를 통해 시스템이 안정적으로 동작하도록 보호할 수 있습니다.
--------
trap
트랩은 인터럽트와는 구분되는데,
인터럽트는 외부 장치나 소프트웨어에서 발생한 이벤트에 의해 발생하는 반면,
트랩은 프로그램 내부에서 명령어 수행 중에 발생하는 예외 상황에 의해 발생한다.
--------
운영체제는 인터럽트 기반으로 동작한다.
운영체제는 (시스템의 하드웨어와 소프트웨어를 관리하고 제어하는데, 이러한 이벤트는 인터럽트로 처리되며,
인터럽트가 발생하면 인터럽트 핸들러가 실행되기 때문)
인터럽트는 외부 인터럽트와 내부 인터럽트로 나누어진다
External interrupt
:비동기적(클럭과 맞추지 않음)
외부 하드웨어에 의해 발생(키보드, 마우스 등.. CPU 밖에 있으면 다 외부하드웨어임)
Internal interrupt
:소프트웨어 내부에서 발생하는 인터럽트. 소프트웨어에서 발생하는 예외 상황이나 오류에 대응하여 처리할 때 사용된다.
내부 인터럽트는 여러가지 있는데
1. Fault: 현재 명령어를 저장하고 -> ISR수행 -> 원래 명령어로 돌아옴
(복구 가능한 예외 상황을 만났을 때 발생함. 페이지 부재 등)
2. Trap: 현재 명령어 저장 -> ISR수행 -> 트랩된 명령어의 다음줄로 리턴
(system call: 프로그램이 운영체제의 기능을 호출할 때)
3. Abort: ISR->기존 작업을 취소함.
(복구 불가능한 예외상황시. 0으로 나누기, 명령어가 잘못됨 등)
Interrupt Handling
-Vectored Interrupt system
인터럽트가 발생하면 인터럽트 번호를 통해 인터럽트 서비스 루틴의 주소를 찾아 실행하는 방식이다.
인터럽트 우선순위를 가지고있어서 더 높은 우선순위의 인터럽트가 발생하면 현재 처리 중인 인터럽트를 중단하고 높은 ㅅ우선순위의 인터럽트를 처리한다.
-Polling system
:응답이 빠르고, 문맥교환을 하지않아도 됨. CPU가 계속 지켜보고 있기 때문에 CPU자원낭비가 생김.
I/O장비가 빠르고, 서비스루틴코드가 짧고, 잘 일어나지 않는 경우에 polling방식이 유리함)
Polling system은 인터럽트가 발생하면 CPU가 주기적으로 모든 인터럽트 요청을 조사하고, 인터럽트가 발생한 장치를 찾아서 해당 인터럽트를 처리하는 방식이다. 이 방식은 우선순위가 없으므로 낮은 우선순위의 인터럽트가 발생해도 처리 중인 인터럽트가 끝나야 처리된다. 또한 인터럽트 요청을 계속해서 조사하기때문에 CPU사용량이 많아져 처리 속도가 느려질 수 있다.
'2023-1 > 운영체제' 카테고리의 다른 글
CPU scheduler (0) | 2023.04.05 |
---|---|
Process and Scheduling 2 (0) | 2023.03.31 |
Process and Scheduling (0) | 2023.03.16 |
Storage Structure/Multiprogramming/Multitasking/process/memory/file (0) | 2023.03.13 |
Operating System (0) | 2023.03.07 |
댓글