CPU (Central Processing Unit, 중앙처리장치)
산술논리연산장치, 제어장치, 레지스터로 구성되어 있는 컴퓨터 장치.
입력 받은 명령을 해석/연산 한 후, 결과 값을 출력 장치로 전달한다. 스스로 작업을 수행하는 것이 아니라 매뉴얼에 따라 CPU 내부의 program counter 레지스터가 가리키고 있는 메모리 주소에 위치한 instruction을 실행한다.
CPU에 대한 통제 역시 운영체제의 역할이다.
1-1 제어장치(CU, Control Unit) : 프로세스 조작을 지시하는 CPU의 한 부품. 입출력 장치 간 통신을 제어하고 명령어들을 읽고 해석하며 데이터 처리를 위한 순서를 결정한다.
1-2 산술논리연산장치(ALU, Arithmetic Logic Unit)은 덧셈,뺄셈 같은 두 숫자의 산술 연산과 베타적 논리합, 논리곱 같은 연산을 계산하는 디지털 회로.
1-3 레지스터(Register) : CPU 안에 있는 매우 빠른 임시기억장치. CPU와 직접 연결되어있어 연산 속도가 메모리보다 빠르다. CPU는 자체적으로 데이터를 저장할 방법이 없기 때문에 레지스터를 거쳐 데이터를 전달.
CPU 연산 처리
1 제어장치가 메모리에 계산할 값을 로드한다. 또한 레지스터에도 로드한다.
2 제어장치가 레지스터에 있는 값을 계산하라고 산술논리연산장치에 명령한다.
3 제어장치가 계산된 값을 다시 레지스터에서 메모리로 저장한다.
Memory (RAM 또는 Random Access Memory, 주기억장치) ─ CPU가 처리할 데이터나 명령어가 임시로 저장되는 곳으로 CPU의 작업공간 역할을 한다. CPU는 매 클럭 사이클마다 메모리로부터 기계어로 작성된 instruction을 읽어서 실행한다. 컴퓨터 작업을 할 때 디스크에 있는 데이터는 먼저 메모리로 이동된 다음 CPU로 전송된다. 프로그램의 실행도 이와 마찬가지로, CPU가 메모리에 저장되어 있는 용량만큼 프로그램을 작동시킨다.
Disk (HDD 또는 SSD등... , 보조기억장치) ─ 보통 보조기억장치라고 하지만 I/O device라고도 할 수 있다. 디스크 정보를 메모리로 읽어들이는 input device로서의 역할과, CPU의 처리 결과를 디스크의 파일 시스템에 저장하는 output device로서의 역할을 동시에 수행한다.
사용자가 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치 필요
Mode Bit을 통해 소프트웨어 제어 메커니즘에 따라 두 가지 모드의 지원
1: 사용자 모드 ─ CPU 제어권이 사용자 프로그램에 있음
0: 커널 모드 ─ CPU 제어권이 운영체제에 있음
커널 모드일 때는 메모리 뿐만 아니라 하드웨어(I/O장치) 대한 접근이 가능하지만 사용자 모드일 때는 자원에 대한 제한적인 접근만이 가능하다.
보안을 해칠 수 있는 중요한 명령어는 커널 모드에서만 수행 가능한 특권명령으로 규정
interrupt나 exception 발생 시 하드웨어가 mode bit을 0으로 바꿈. 사용자 프로그램에게 CPU를 넘기기 전에 mode bit을 1로 셋팅
유저 모드 : 유저가 접근할 수 있는 영역을 제한적으로 두며 컴퓨터 자원에 함부로 침범하지 못함
커널 모드 : 모든 컴퓨터 자원에 접근할 수 있는 모드
커널 : 운영체제의 핵심 부분. 시스템콜 인터페이스를 제공하며 보안, 메모리, 프로세스, 파일시스템, I/O디바이스, I/O요청관리 등 운영체제의 중추적인 역할을 한다.
CPU는 항상 메모리에 있는 instruction을 실행시키는데, 키보드나 디스크와 같이 I/O Device에서 인터럽트가 들어왔을 때, 이를 인터럽트 라인에 세팅하고 CPU에게 알려 처리하도록 함. CPU는 수시로 Interrupt line을 통해 인터럽트 발생 여부를 확인한다. 즉 Interrupt line은 interrupt가 들어와서 대기하는 곳.
현대의 운영체제는 인터럽트에 의해 구동됨.
✨ 인터럽트란?
어떤 신호가 들어왔을때 CPU를 잠시 정시키는것.
ex) CPU가 프로세스를 작동하다 I/O 디바이스를 써야될 일이 생김. 그래서 디스크한테 자료를 내놔 했는데, 이 디스크는 CPU에 비해 너무 느림. 그동안 CPU는 놀고 있을 수 없으니까 다른 일을 하로 가고, 디스크가 일을 다했으면 CPU에 알려주는 메시지. 그 후 CPU는 이전의 다 못처리한 일을 하러 감.
CPU는 어떻게 이전에 하던 작업을 기억하고 있을까?
✓ 인터럽트 당한 시점의 레지스터와 program counter를 저장한 후 CPU의 제어를 인터럽트 핸들러에 넘긴다.
✨ 인터럽트 종류
✨ 인터럽트 관련 용어
🏴 인터럽트의 종류가 여러개 있고, 각각 해야할 일이 다르기 때문에 각 인터럽트가 처리해야할 일을 인터럽트 처리 루틴에 담아둠
🏴 어디에 있는 함수들을 실행해야 하는지? → 인터럽트 벡터에 명시해둠
✨ 메모리보다 더 빠르면서 CPU가 기계어 연산에 필요한 Input, Output을 저장하는 CPU 내부의 공간.
✨ PC(Program Counter) register - 실행할 기계어의 주소를 가지고 있는 레지스터. 메모리를 가르키고 있다고 봐도 됨. CPU는 pc register를 읽고 메모리 위치로 간다.
✨ 프로그램의 CPU의 독점을 막기위해 사용되는 장치. 프로그램이 CPU를 차지하고 있을때 운영체제 단독으로는 이를 가져 올 수 없기 때문에 이런걸 방지하기 위한 부가적인 하드웨어.
모든 입출력 명령은 ‘특권 명령’이다.
특권 명령: 하드웨어의 동작, 시스템의 통합 환경 변경 등 개별 유저가 실행해선 안되는 명령. 사용자 모드에서는 실행 불가
💡 시스템 콜 : 사용자 프로그램은 직접적으로 I/O device에 접근할 수 없기 때문에(입출력 명령은 특권명령) 운영 체제에게 I/O를 요청하는 것을 시스템 콜이라고 한다.
보안을 포함한 여러 이유로 인해 only 운영체제만이 I/O device에 접근 가능하다.
때문에 프로그램 실행중에 키보드 입력값을 받거나 화면을 출력하는 등의 I/O 작업을 해야 할 경우 스스로 CPU를 운영체제에게 넘겨주고(Trap) 운영체제는 CPU를 받아서 I/O 요청이 올바른 요청인지 확인한 후 해당 요청을 Device controller에 전달한다.
✨ 사용자 프로그램이 I/O를 하는 과정 간략히 정리
✨ I/O device controller
device driver(장치 구동기): 컴퓨터 내부에서 CPU가 진행하는 코드. 각 장치별 처리루틴 → software
device controller(장치 제어기): 각 장치를 통제하는 일종의 작은 cpu, 이 디바이스 컨트롤러에는 펌웨어가 들어 가있고 그걸로 작동을 한다. → hardware
I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감
보통의 경우는 동기식 입출력을 사용한다.
Interrupt가 없다면? 방법 1
Interrupt가 있을때. 방법 2
I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감
결과를 확인하기 전에 수행할 수 있는 작업이 있는 경우 비동기식 입출력을 사용한다.
(보통은 읽기 작업은 동기식, 쓰기 작업은 비동기식이 가능하기도 하다)
차이점
device controller가 I/O 작업이 끝나기를 requesting process가 기다리는 것과 기다리지 않는 차이
공통점
두 경우 모두 I/O 완료는 인터럽트를 통해 알려줌
일반적으로 I/O 디바이스들이 메인 메모리에 바로 접근할 수 없고 I/O 디바이스들은 인터럽트를 발생시켜 CPU가 I/O 디바이스들의 데이터를 읽어 메인 메모리 프로그램에 올린다.
하지만 CPU는 프로그램의 명령어를 처리하는 것 외에도 항상 각각의 I/O 디바이스들 인터럽트에 대한 처리도 해야 하기 때문에 기존 CPU 작업들을 방해하게 된다.
이러한 비효율성을 극복하기 위해 CPU 대신에 I/O 디바이스들에 인터럽트를 처리할 컨트롤러를 하나 더 둔다. 이것이 바로 DMA 장치이다.
DMA가 있음으로 더 이상 CPU는 하던 작업을 멈추고 각종 I/O디바이스들의 인터럽트를 처리할 필요가 없어진다. 단지 CPU는 제어신호만 주고받으면 된다.
이때 DMA는 바이트 단위가 아니라 블록 단위로 데이터를 모아서 CPU에게 인터럽트를 발생시킨다. 이러한 방법으로 CPU의 효율을 높일 수 있다.
위로 갈수록 빠르고, 비싸다.(용량이 작음)
캐싱의 원리 : 필요할때 항상 원본 저장장치(HDD)까지 가서 읽어오면 느리다. 그 위의 장치들이 가지고 있다면 밑에까지 내려가지 않고 읽어 올수 있는 것.
=> 다만 위쪽으로 올라갈수록 용량이 작으므로 다 가지고 있을 수 없다.
캐싱을 잘하려면 재사용성이 높은것을 보관하고, 사용성이 낮은것을 쫒아내는 것이 필요하다.
Main memory 부분 (Executable) -> 직접 실행이 가능
Secondary 부분 -> I/O를 해야 하는 장치. I/O 컨트롤러를 통해..
Primary부분은 휘발성. 전원이 끄지면 데이터가 다 날아간다. Secondary부분은 비휘발성 기억장치. 데이터가 날아가지 않는다.