
Malloc Lab 의 가장 간단한 malloc package 구현 방식인 Naive List 방식에 대해 알아보겠습니다. Naive : heap 크기를 계속 증가시켜가며 할당하는 방법입니다. Naive 방식의 특징은 다음과 같습니다. 1. 높은 Throughput 을 갖는다. : malloc 시 heap 의 크기를 증가시킨 후 메모리 블럭을 반환하므로 상수시간에 동작합니다. 2. 낮은 utilization 을 갖는다. : free한 block을 다시 사용하지 않습니다. 따라서 한번 malloc 하고 free 시키면 그 메모리 블럭은 더 이상 이용할 수 없습니다. Naive List 방식은 mm-naive.c 에 이미 구현되어 있습니다. Malloc Lab Handout 파일에 정의된 Makefile 을..

이번 포스팅에서는 malloc lab의 기본 구성에 대해 알아보겠습니다. 먼저 malloc lab 의 가정은 다음과 같습니다. 1. 메모리는 워드 단위로 주소가 지정됩니다. (Malloc Lab 에서 1Word 는 4Bytes입니다.) 2. 응용 프로그램에서 무순의 할당과 반환 요청이 발생합니다. 반환 요청은 할당된 블록과 항상 pairing 이 되어야 합니다. 3. Allocator 는 이미 할당된 블록의 개수와 크기는 조정할 수 없습니다. 4. Allocator는 모든 할당 요청에 즉시 반응해야 합니다. 즉, 요청 순서를 변경하거나, 요청을 buffer 에 저장해 둘 수 없습니다. 5. Allocator 는 메모리 블록을 반드시 free Memory 에서 할당해야 합니다. 6. 블록들은 모든 주소 맞..

프로그래머에게는 메모리에 대한 이해가 중요합니다. 메모리에 대한 이해가 중요한 이유는 다음과 같습니다. 메모리는 무한한 자원이 아닙니다. 메모리 참조 버그는 매우 치명적입니다. 버그의 영향이 시공간적으로 동떨어져서 발견되고, Run-time 에 버그가 발생하는 경우 실제 세계에서 큰 손실을 초래할 수 있습니다. 메모리의 성능은 일정하지 않습니다. CPU 와 가까운 메모리공간인 Cache는 속도가 빠르지만, Memory 나 Auxillary Memory는 Cache보다 속도가 느립니다. 따라서 메모리 시스템의 특성을 잘 반영하는 프로그램을 디자인해야 만족스러운 성능을 얻을 수 있습니다. 그냥 코드를 짜면, 컴파일러가 알아서 메모리를 고려하여 컴파일 해주는데 왜 동적 메모리를 사용하고 관리하는 법을 알아야할..

Shell lab trace 09 번은 부모 프로세스 (tiny shell) 이 sigtstp 를 수신하면, foreground 로 실행중인 job 을 suspend 시키고 tshref 의 출력에 맞추는 문제입니다. 먼저 trace09.txt 파일을 확인해보겠습니다. ./mytstpp 를 실행한 후 job 로 joblist를 출력하게 만들 것을 예상할 수 있습니다. 이번엔 mytstpp.c 파일을 열어보도록 하겠습니다. 먼저 mytstpp는 trace08 에서 살펴보았던 그것과 굉장히 유사한 구조를 갖고 있습니다. 차이점은 parent process 에 sigtstp 시그널을 보낸다는 것입니다. 그렇다면 부모 프로세스에서는 sigtstp 를 수신하면 handler를 통해서 foreground job 을 ..