CPU에 더 알아보자
우리는 CPU에 대해서 더 자세히 알아볼필요가 있다.
우린 앞서 CPU를 매 클럭마다 메모리에서 기계어를 하나씩 읽어와 자신의 일을 수행하는 친구라고 알고있다. 그럼 여기서 궁금증은 메모리에 무슨 기계어를 읽어오는것일까? 배열에서 주소를 가리키듯 CPU또한 메모리 위치를 가리키는 주소지가 필요할것이다.
즉, CPU에 있는 여러 Register에서 메모리 주소를 가리키는 Register를 통해서 메모리의 기계어를 갖고오는데 Program counter라고 하는 Register이다.
다시말해 Program counter는 메모리에서 실행할 다음 명령어의 주소를 저장하는 레지스터이다.
CPU는 PC Register의 기계어를 해석하는일이라고 하였다. 하지만 CPU는 PC Register에서 기계어를 해석하기전에 해야할일이 또 하나있다. Memory에서만 진행되는 일이면 되는데 왜 그런것인가?
만약 하나의 Job이 I/O작업을 끝마치고 돌아와 Device controller와 DMA Controller를 통해서 정보를 전달한다면 이 정보는 결국 Interrupt로 가게된다.
CPU가 Register를 통해 기계어를 먼저 해석한다면 Interrupt Line의 존재는 없어진다. 그러므로
Interrupt을 통해 확인을 먼저 한후, CPU는 하던 Job을 멈추고 Interrupt에서 OS로 넘어가게된다.
CPU는 Interrupt의 Job들을 먼저 확인 한후, 이상이없다면 PC Register를 통해 메모리를 갖고오거나 이상이 있다면 Interrupt 처리를 통해 CPU의 사용은 OS로 넘어가게된다 로 알고있으면 될거같다.
동기식 입출력과 비동기식 입출력
쉽게 이야기 해보자면 동기식 입출력은 I/O 요청후 입출력작업이 완료된 후, 제어가 사용자 프로그램에 넘어간다
I/O 요청후 CPU를 다른곳으로 넘기지않고 계속 자신이 갖고있는 (낭비 우려) 것이다.
구현 방법은 총 2개
1. I/O가 끝날 때가지 CPU를 낭비
2. I/O가 완료될때까지 해당 프로그램에게서 CPU를 빼았는다.
비동기식 입출력은 I/O요청후 입출력작업이 완료되기 전, 제어가 사용자 프로그램에게 즉시 넘어간다. 그림을 통해 좀더 자세하게 알아보자.

I/O는 Kernel에의해서만 작동된다. => I/O작업은 운영체제가 관리하기때문에 사용자프로그램은 할수없다.
DMA Controller
앞서 DMA Controller는 I/O장치가 무분별한 Interrupt를 사용하요 CPU의 오버헤드를 방지하는 용도로 생각할수있다.
원래는 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해서 사용한다. CPU의 중재 없이 Device contrller가 device의 local buffer storage의 내용을 메모리에 block 단위로 직접 전송할수있다는 이야기다.
DMA Controller의 흐름을 생각해보자면
DISK가 I/O 행위를 한다면 Local buffer에서 양이 어느정도 쌓인다면 DMA Controller가 그 내용을 Memory로 Copy하고 (중요), 어느정동의 data I/O가 끝난다면 Interrupt를 한번 걸어 CPU에게 알려준다 => Interrupt 빈도수 낮아진다.
계속 I/O를 거론하는데 살짝 I/O 입출력에대해 맛만 보고 가겠습니다.
I/O 입출력 방식

CPU 기준으로 설명해보자면 좌측은 CPU에서 실행할수있는 기계어에는 메모리만 접근하는 기계어가 존재하고, I/O 장치에만 접근하는 기계어가 존재합니다.
메모리 주소가 있듯이 I/O주소가 존재하므로 특정 device에 대해 주소로 접근합니다. 즉, I/O 를 수행하는 special Instruction에 의해 I/O가 발생합니다. (메모리 접근하는 명령어 따로, I/O 수행하는 명령어 따로)
하지만 우측은 I/O Device들에다가 메모리 주소를 먹여서 메모리 접근하는 기계어를 통해서 I/O를 할수있습니다 이것이 Memory Mapped I/O라고할수있습니다. 내부적으로 로직이 덜필요하고 복잡성이 사라지기때문에 저렴하고 빠르면서 쉬운 CPU를 만들기에 적합합니다. 그러나 주소와 데이터 버스를 많이 사용하게 되어 메인 메모리 접근 비용보다 더 많이 들수있는 단점이 존재합니다.
I/O작업을 알아봤으니 이제 프로그램이 실행방식에대해서도 그림으로 알아봅시다.
프로그램의 실행방식

File System에 있는 실행파일 A를 실행시키면 Physical Memory에 올라가게되지만 그전에 Virtual Memory에 올라가게된다.
Virtual Memory란 어떤 프로그램을 실행시키면 Address space 가 생성되며 0번지부터 시작하는 프로그램만의 독자전인 주소공간이 생긴다. 프로그램 A를 시작하게 되면 0번지의 자기 자신만의 독자적진 주소공간이 생기는것처럼 말이다. (code, stack,data로 구성)
Physical memory와 virtual memory의 차이는 부팅이다. 부팅을 한다면 virtual Memory는 사라지게되지만 Physical memory는 그렇지 못하게된다. 좀만 더 생각하면 Memory낭비라고 생각할수있겠지만 다행히도 Physical Memory는 필요한부분만 상주하게된다 그렇지 않은 부분들은 Swap Area라는 Diskc에 위치하게된다 (이는 전원이 나가면 사라지는 Disk이므로 메모리 연장 공간용으로 활용된다)
사진에보이는 Address translation은 운영체제가 개입하지않는 하드웨어의 장치를 이용하여 Virutla Memory와 Physical Memory이 서로 다른 주소번지를 맞춰주기위해 주소변환을 하는 기능이다. 또한 맨밑을 보면 Kernel Address Space가 보이는데, 운영체제 커널도 하나의 프로그램이기때문에 좀더 알아볼 필요성이 존재한다.

사용자 프로그램이나 운영체제는 프로그램을 실행시키기위해서 하나의 함수를 이용한다.
함수
1. 사용자 정의 함수 => 자신의 프로그램에서 정의한 함수
2. 라이브러리 함수 => 자신의 프로그램에서 정의하지않고 갖다 쓴 함수, 실행파일에 포함되어있다.
3. 커널함수 => 운영체제 프로그램의 함수, 즉 커널 함수의 호출은 시스템 콜을 의미한다

이를 통해 전반적인 운영체제 구조에 대해서 알아봤습니다. 다음시간에는 Process에 대해서도 정리해보겠습니다.
Q. Register란?
A. CPU에 내장된 작은 저장 장치. 데이터를 임시로 저장하고 컴퓨터성능을 높이는데 도움이됨
Q. 사용자 프로그램이 CPU를 사용하다가 I/O 작업을 해야할떄는 어떤 과정이 일어나나요?
1. 사용자 프로그램이 CPU를 가지고 기계어를 실행함
2. 사용자 프로그램은 I/O 작업을 직접 전달할수없음 => 시스템콜을통해 OS를 불러 실행해야됨
3. PC Register는 OS를 가리키는 주소로 이동해야함 => 하지만 바로 정상적인 Memory로 불러 이동을 할수없음
4. 사용자 프로그램이 의도적으로 Interrupt line을 사용해 PC Register가 Memory를 바라보기전, Interrupt line을 확인하여
I/O 작업이 일어남
Q. I/O 작업이 어떤식으로 일어날까요?
1. CPU는 memory에서 instruction을 수행한다 (PC Register 기억)
2. Interrupt line을 통해서 CPU를 운영체제에 넘긴다 (I/O 작업을 확인후)
3. 운영체제가 I/O Device Controller에게 요청합니다
4. I/O 작업이 완료되면 I/O Device Local Buffer에 결과값을 저장합니다.
5. CPU에 Interrupt Line을 보냅니다
6. I/O 작업은 상당히 긴 시간을 소요하기때문에 Interrupt line을 통해서 요청을 보낸 OS는 다시 CPU를 넘겨
CPU는 다른 Instruction을 수행합니다.
7.OS는 Interrupt를 계속 확인
출처 : 반효경 운영체제 , 운영체제 (Operation System) Abraham Silberschatz, Peter Baer Galvin, Greg Gagne
'💻Computer Science > 운영체제' 카테고리의 다른 글
| [운영체제] Process 2 [비동기,동기식 입출력과 Scheduling Queue, Thread] (0) | 2024.07.17 |
|---|---|
| [운영체제] Process 1 [프로세스란 무엇인가 ?] (0) | 2024.07.15 |
| [운영체제] 운영체제 구조 (시스템 구조를 먼저 알아보자)- 1 (0) | 2024.07.04 |