中庸
article thumbnail
[Malloc Lab] Naive List
시스템 프로그래밍 2022. 12. 4. 23:12

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 을..

article thumbnail
[Malloc Lab] Introduction to Malloc Lab
시스템 프로그래밍 2022. 12. 4. 23:11

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

article thumbnail
[System Programming] 동적 메모리 할당 (Dynamic Memory Allocate)
시스템 프로그래밍 2022. 11. 26. 16:23

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

article thumbnail
[Shell lab] Trace 09, Trace 12
시스템 프로그래밍 2022. 11. 24. 02:42

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 을 ..