Loading the catalog…
Loading the catalog…
지금까지 배운 내용은 대략 다음과 같다. Day 1 CPU / ALU / Register / Fetch-Decode-Execute ↓ Day 2 Cache / Locality ↓ Day 3 RAM / Memory Address ↓ Day 4 Address / Data / Control Bus ↓ Day 5 I/O / Controller / Polling ↓ Day 6 Interrupt / Context 보존 내가 인터넷 창도열고, 동영상도 키고, 노래도 듣고, 카톡도하고 ... 여러가지가 동시에 실행되는것처럼 보이는데 CPU 는 정말 이것들을 전부 동시에 실행하는걸까? 우선, 내가 여러가지 프로그램들을 실행중이라고 하자. 크롬 동영상 노래 카톡 개발 ... DAY 1 에서 배운 CPU 의 기본 실행 방식은 다음과 같았다. PC ↓ Fetch ↓ Decode ↓ Execute ↓ 다음 명령어 어떤 순간에는, 특정 프로그램을 실행하고 있는것이다. 그런데, 어떻게 여러개의 프로그램이 동시에 움직이는것처럼 보이는걸까? 동영상을 보면서, 노래도 듣고, 동시에 카톡도하는것처럼 ... 여기서, Core / OS Scheduler / Context Switching 에 대한것들이 필요하다. CPU / CPU Core CPU ┌───────────────────────────┐ │ │ │ Core 1 Core 2 │ │ │ │ Core 3 Core 4 │ │ │ └───────────────────────────┘ CPU 안에 Core 는 여러개가 들어간다. 각 Core 는 명령어를 실행할수있다. CPU 안에 Core 가 4개가 있다고하면 ... Core 1 → Program A Core 2 → Program B Core 3 → Program C Core 4 → Program D 처럼 여러 실행프로그램들을 병렬로 실행할 수 있다. 우선, CPU Core 가 1개뿐이라고 가정하자. 실행할 프로그램이 3개가 있다고 하자. Program A Program B Program C Core 는 현재 1개이다. CPU Core ? Program A ────────┐ Program B ────────┼──→ CPU Program C ────────┘ CPU Core 가 1개이기때문에 프로그램 A / B / C 를 동시에 실행할 수 없다. 가장 단순하게는 아래와 같이 실행할 수 있을것이다. A 실행 ↓ B 실행 ↓ C 실행 ↓ A 실행 ↓ B 실행 ↓ ... 처럼 아주 빠르게 번갈아가면서 실행하는것이다. 그런데, A 실행하고 B 실행하고 하는것처럼, 어떻게 A -> B 로 바꾸는걸까? Program A 가 실행중이라고 해보자. CPU Core PC = 120 R1 = 10 R2 = 20 ... 다음과 같은 상태를 가질것이다. ( Context ) 이 상태에서 갑자기 B 를 실행하면 문제가 생긴다. Program B R1 = 500 R2 = 700 ... 그냥 B 를 실행한다면, A 의 상태가 사라지게될것이다. 따라서 먼저, B 를 실행하기이전에 A 의 상태를 저장해두어야한다. Program A PC = 120 R1 = 10 R2 = 20 ↓ 저장 그리고, Program B 에 대한 이전상태가 있었다면 CPU 에 복원해놓는다. Program B PC = 300 R1 = 500 R2 = 700 ↓ CPU에 복원 이후, Prgoram B 를 실행한다. 즉, 다음과 같은 실행과정을 거친다. CPU Program A 실행 ↓ A 상태 저장 ↓ B 상태 복원 ↓ Program B 실행 이게, Context Switching 의 핵심 아이디어이다. DAY 6 에서 배웠던 Interrupt 를 다시한번 생각해보자. 어떤 이벤트가 발생했을때, CPU 에게 알려주는 역할이었다. 다시 돌아와서, Program A 를 실행하고 있는데 언제 A 를 멈추고 B 를 실행해야 하는걸까? A 가 위를 판단한다고 하자. OS: "적당히 쓰고 CPU 돌려줘." Program A: "ᄋᄏ." while (true) { } A 가 계속해서 CPU 를 사용할것이다. 이때 Timer Interrupt 가 등장한다. Program A 실행 AAAAAAAAAAAAAAAA ↓ Timer Interrupt! ↓ Operating System OS 가 CPU 제어권을 다시 얻을 기회를 얻는다. 그리고나서, OS 가 A 를 계속해서 실행할지 / B 를 실행할지를 판단한다. B 를 실행하기로 판단했다면, A Context 저장 ↓ B Context 복원 ↓ B 실행 전체 흐름은 다음과 같다. Single Core 라고하자. 이후, Program A / Program B 가 존재한다. CPU Core Program A Program A 를 실행한다. Fetch ↓ Decode ↓ Execute Timer Interrupt OS 가 실행이 된다. Program A ↓ Interrupt ↓ OS A 를 계속해서 실행할까 ? / B 를 실행해야하나? 를 OS 가 판단한다. ( 이런 판단들을 담당하는게 Scheduler 이다. ) A 상태(Context) 보관 B 를 실행하기로 맘먹었고, B 를 실제로 실행하기 이전에 실행중이던 Program A 에 대한 상태 ( Context ) 를 보관해놔야한다. A Context PC Register 기타 필요한 실행 상태 B의 Context 복원 이전에 B가 실행이 된적이 있다면, B 가 어디까지 실행했는지에 대한 상태 ( Context ) 가 있을것이다. B Context ↓ CPU에 복원 B를 실행 이제, CPU Core가 B 를 실행한다. CPU Core Program B Fetch ↓ Decode ↓ Execute 이후, 어느정도 시간이 지난뒤에 다시 Timer Interrupt 가 발생한다. B ↓ Interrupt ↓ OS ↓ 다음 실행 대상 결정 이후, 위와같은 과정들을 반복한다. 즉, 실제로는 여러개의 프로그램들이 동시에 돌아가는것이 아니라 사실은 엄청빠르게 프로그램들이 번갈아가면서 실행되고 있었기때문에 사람이 느끼기에는 동시에 실행되는것처럼 느낀것이다. 즉, Single Core 에서는 병렬로 실행되는것이아닌 번갈아가면서 실행됐던것이다. Single Core -> 동시성 (Concurrency) Multie Core -> 병렬성 (Parallelism) Context Switching 은 공짜가 아니다. A 에서 B 로 바꾸려면, A 실행 ↓ A 상태 저장 ↓ B 상태 복원 ↓ B 실행 를 해야한다. 저장하고 복원하고 다시 실행하는데에까지는 걸리는 시간이 있을것이다. ( 매우작지만 .. ) 우리가 매우 작다고 느끼는시간도 CPU 입장에서는 굉장히 큰 시간으로 느껴질수 있다. ( 연산속도가 압도적으로 빠르기때문에 ) 즉, Context Switching 에는 비용이 들어간다. CPU Core 수는 정해져있으므로, OS 는 여러 실행 작업에 CPU 작업시간을 나누어준다. 이후, 실행대상을 변경할때 기존 Context 를 저장하 새로 실행할 프로그램의 Context 복원하고 실행하게된다. 여러 Core 가 있다면 병렬적으로 처리하겠지만 싱글 Core 라면 Context Switching 에 대한 비용이 들어간다. Single Core 동시성(Concurrency) CPU Core Program A ───────┐ Program B ───────┤ Program C ───────┘ ↑ Scheduler 시간 → A A A | B B | C C | A A | B B ↑ Context Switching Multie Core 병렬성(Parallelism) Core 가 여러개이므로 ... Core 1 → AAAAAAAAAAAAA Core 2 → BBBBBBBBBBBBB Core 3 → CCCCCCCCCCCCC Core 4 → DDDDDDDDDDDDD 병렬로 실행된다. 동시성은, 여러 작업이 일정 시간 범위내에서 함께 진행되도록 실행하는것이다. Single Core 에서도 Context Switching 과 같은 흐름으로 구현할수있다. 병렬성은 여러 Core 들이 여러작업이 실제 같은 시점에 실행되는것이다.
What RADAR observed and classified to build this opportunity. It is what the source published, not a verification that the offer is still active.
[CS DAY7] - CPU Core와 동시 실행: CPU는 여러 프로그램을 어떻게 동시에 실행하는 것처럼 보이게 할까?. 지금까지 배운 내용은 대략 다음과 같다. Day 1 CPU / ALU / Register / Fetch-Decode-Execute ↓ Day 2 Cache / Locality ↓ Day 3 RAM / Memory Address ↓ Day 4 Address / Data / Control Bus ↓ Day 5 I/O / Controller / Polling ↓ Day 6 Interrupt / Context 보존 내가 인터넷 창도열고, 동영상도 키고, 노래도 듣고, 카톡도하고 ... 여러가지가 동시에 실행되는것처럼 보이는데 CPU 는 정말 이것들을 전부 동시에 실행하는걸까? 우선, 내가…
Open source