🧐 Trace00 EOF(ctrl + d) 입력을 받으면 프로그램을 종료시켜야 합니다. 더보기 main문을 보면 다음과 같이 이미 구현되어 있는 것을 알 수 있습니다. while(1)을 통해 쉘을 계속 실행시키다가 ctrl + d가 입력되면 프로그램을 종료합니다. 🧐 Trace01 quit 명령어를 built-in command로 등록합니다. quit이 입력되면 프로그램이 종료되어야 합니다. 더보기 void eval(char *cmdline) { cahr * argv[MAXARGS]; parseline(cmdline, argv); builtin_cmd(argv); return; } int builtin_cmd(char **argv) { char * cmd = argv[0]; if (!strcmp(cmd,..
🧐 Volatile 자바에서 지원하는 volatile이라는 키워드는 다음과 같은 특성을 가집니다. volatile로 선언된 변수가 있는 코드는 최적화되지 않습니다. volatile 키워드는 변수를 'Main Memory에 저장하겠다'라고 명시하는 것입니다. 변수의 값을 Read할 때마다 CPU cache에 저장된 값이 아닌, Main Memory에서 읽는 것입니다. 🧐 사용하는 이유 volatile키워드의 사용 이유를 알기 위해서는 메모리 구조를 알아둘 필요가 있습니다. 🧐 메모리 구조 보통의 메모리 구조는 다음과 같습니다. CPU 내에는 성능 향상을 위해서 L1 Cache가 내장되어 있습니다. CPU 코어는 메모리에서 읽어온 값을 캐시에 저장하고, 캐시에서 값을 읽어서 작업합니다. 값을 읽어올 때 우선..
서론 앞서 배운 유한 오토마타와 푸시다운 오토마타를 비교해보면, 임시 저장장소의 특성이 둘 사이의 차이를 만들어냄을 알 수 있습니다. 만약 저장장소가 없다면 유한 오토마타이며, 저장장소가 스택이라면 유한 오토마타보다 더 강력한 푸시다운 오토마타를 갖게 됩니다. 만약 오토마타에 좀 더 유연한 저장장소를 더해준다면, 더욱 강력한 언어군을 발견할 수 있을 것입니다. 예를 들어 두 개, 세 개의 스택, 큐, 또는 다른 저장 장치를 사용한다면 어떤 결과가 나올까요? 각각의 저장장소는 새로운 종류의 오토마타를 정의하고, 그것을 통하여 새로운 언어군을 정의할 수 있을까요? 이러한 접근은 대부분의 경우 흥미로운 결과를 이끌어내지는 못했습니다. 가장 강력한 오토마타와 계산의 한계에 대하여 무엇을 이야기할 수 있을까요?..
🧐 Associative Cache Associatvie Cache는 유연한 블록 배치(placement)를 통해 캐시 실패율(Miss rate)을 줄이는 방법입니다. 이전 글 까지에서는 메모리 블록을 캐시에 넣을 때 각 블록이 캐시의 딱 한 장소에만 들어갈 수 있도록 하는 단순한 배치 방법인 directed mapped를 사용하였습니다. directed mapped는 블록을 배치하는 다양한 방식들 중, 극단적으로 블록을 한 곳에만 넣을 수 있도록 하는 방법입니다. 반대쪽 극단에는 블록이 캐시의 어느 곳에나 들어갈 수 있도록 하는 방식이 있습니다. 👉 fully associative 블록이 캐시의 어느 곳에나 들어갈 수 있도록 하는 캐시 구조를 의미합니다. 메모리 블록을 캐시 내의 어떤 엔트리와도 연관(..
🧐 기억장치 조합회로는 출력이 단지 현재 들어온 입력에 대해서만 의존적이었습니다. 앞으로 배울 기억장치는 출력이 현재의 입력뿐 아니라 과거의 입력열(sequence)에도 의존적입니다. 즉 과거에 어떤 입력이 들어왔느냐에 따라 동일한 입력에 대해서도 다른 결과가 출력될 수 있습니다. 순서회로는 출력을 발생시키기 위해서 과거 입력에 대하여 기억할 수 있어야 합니다. 기억장치의 종류로는 래치와 플립플롭이 있습니다. 📕 값을 기억하는 것의 의미 회로는 '수'를 이해하지 않습니다. 단지 전류가 흐르느냐, 흐르지 않느냐를 따질 뿐입니다. 마찬가지로 기억장치라 불리는 메모리도 결국 값을 기억하는 것이 아닙니다. 전류의 흐름상태를 유지하는 것, 그것을 기억한다 표현합니다. 🧐 래치와 플립플롭의 차이 (정확한 정의는 아..