💡 지난 주에 사용했던 malloc을 이번 주에는 만들어 보아요
mm.c
를 구현하고 mdriver
로 채점(테스트) 합니다.▶️ 진행방법
make 후./mdriver
를 실행하면out of memory
에러 발생
책에 있는 implicit list 방식대로 malloc을 구현해서 해당 에러를 없애기
이후 (시간이 된다면) explicit list와 seglist 등을 활용해 점수를 높이기
Tip:./mdriver -f traces/binary2-bal.rep
와 같이 특정 세트로만 채점 할 수 있다.
일단 implicit 방법으로 ./mdriver
가 정상 작동하도록 코드를 완성하기
💡 코드에 따라 점수는 다를 수 있습니다! 그러나, 잘 이해했고, 잘 돌아가게 했으면 1차 완성🙂
WEEK05: 메모리 단편화, 메모리 할당 정책, 시스템 콜, sbrk/mmap
자세히 보러가기
단편화는 가용 메모리가 할당 요청을 만족시킬 수 없을 때 발생하며, 내부 단편화와 외부단편화로 나뉜다.
할당된 블록이 데이터보다 클 때 일어난다.
예를 들어, 할당기는 정렬 제한 사항을 만족시키기 위해서 블록의 크기를 증가시킬 수도 있다.
내부단편화는 정량화가 쉬운데, 단순히 할당된 블록의 크기와 이들의 데이터 사이의 차이의 합을 구하면 된다.
메모리를 할당할 때, 메모리 공간이 전체적으로는 부족하지 않으나, 처리할 수 있는 단일한 가용블록(single free block)이 없을 경우 발생한다.
메모리 할당 정책은 컴퓨터 시스템에서 사용 가능한 메모리를 효율적으로 관리하기 위해 채택되는 규칙 또는 알고리즘을 말한다. 이러한 정책은 메모리를 어떻게 할당하고 해제할지 결정하며, 시스템의 성능, 안정성 및 메모리 사용량에 영향을 미친다. 주요 메모리 할당 정책은 다음과 같다.
인터럽트와 시스템 콜을 설명합니다! 영상 참고!
운영체제(OS)는 '커널 모드'와 '유저 모드'로 구성된다. 우리가 개발하는 프로그램은 일반적으로 유저 모드에서 실행된다. 시스템 콜은 OS가 제공하는 기능으로 커널 영역의 기능을 사용자 모드에서 사용하게 해주는 기능이다. 프로그램 실행 중에 인터럽트가 발생하거나 시스템 콜을 호출하게 되면 커널모드로 전환된다. 커널 모드는 프로그램의 현재 CPU상태를 저장하고 CPU에서 커널 코드가 실행된다. 처리가 완료되면, 중단됐던 프로그램의 CPU 상태를 복원하고 통제권을 유저 모드로 넘겨준다.커널모드는 시스템을 보호하기 위해 존재한다. 우리가 개발한 프로그램이 함부로 하드웨어를 점유하면, 문제가 발생할 수 있다.
이번 주차에서 다루는 메모리와 관련된 시스템콜 이외에도 시스템콜은 프로세스/스레드 관련 외에도 다양한 시스템콜이 존재한다.
brk,sbrk은 malloc 함수와 같은 메모리 할당을 요청할 때 사용되는 시스템콜이다. malloc 함수를 실행 후 실제 메모리를 할당받기 위해선 brk, sbrk 또는 mmap 시스템콜을 수행해야한다.
함수 | 역할 | 방식 | 반환값 |
---|---|---|---|
brk | 데이터 세그멘트 크기 변경 | brk의 인자인 addr에서 지정한 값으로 설정 | 성공(0), 실패(1), 에러(ENOMEM) |
sbrk | 데이터 세그멘트 크기 변경 | 데이터 세그멘트를 increment bytes만큼 증가 | 성공(이전 program break값), 실패(void포인터 형으로 -1), 에러(ENOMEM) |
mmap | 새 가상메모리 영역 요청 | 파일 또는 장치를 메모리에 매핑 | 성공(매핑된 메모리 주소 반환), 실패(MAP_FAILED) |
이번 주차의 과제 중 필수 항목만 (제대로) 완성하고, 나머지는 못 본 주제도 많다. 하지만 남의 코드와 풀이 방식을 보고 잠깐 이해하기보다 내가 구현한 코드를 더 자세히 살펴보고 이론 공부하는 것이 더 도움이 될 거라 생각했다. 또한 과제 점수를 높이기 위해 다들 점수에 집착하는 분위기가 형성되었는데, 그 분위기에 휩쓸리지 않게 이론 공부에 몰입했던 것 같다. malloc 함수는 생각보다 더 소중했다... 다음주면 탐험을 위한 준비가 끝나고 핀토스라는 탐험으로 들어간다.. 화이팅!!