시스템 프로그래밍

송은우·2022년 5월 17일
0

대학 수업

목록 보기
1/6

개발자가 dynamic memory allocator 을 사용해. malloc 같은 것들
힙 영역에서 malloc이 됨. 사이즈 역시도 동적으로 변경됨

brk가 딱 정해져 있을 때 특정 메모리 byte를 할당해주는 역할을 memory allocator가 해줌

힙은 variable sized의 블럭들의 집합.
힙은 프로세스 관점에서 연속적인 블럭들의 집합 중에 어디는 이미 차있음. 그 최소 단위를 chunk라고 함. 그냥 block이 가변적으로 chunk를 선택한다

메모리 해제까지 해줘야 되는 것들 malloc, new, delete 같은 부분에 malloc free역할 하는 Explicit allocator
Implicate allocate free명시적 안 함 garvage collector

최소 단위가 8byte(32비트 운영체제) 16byte (64비트 운영체제)이기에 malloc 1로 하는 것은 사실 의미가 없음. 8과 동일해짐
운영체제가 서로 다른 영역을 접근하지 못하도록 heap 같은 부분을 os 에 있는 가상 메모리 관리자같은 것들이 처리를 해줌.각자 모든 부분을 프로그램마다 소유함. 힙이 프로세스 개수만큼 만들어짐

보통 힙의 끝 brk는 break 라는 부분. 어디서부터 어디까지 사용할 수 있는지 break point역할을 함. grow, shrink, 같은 것들을 통해서 malloc의 내부에서 사용되는 system call의 역할을 함.

intel processor에서는 4byte object를 double word라고 칭함. 하지만 책 기준 4byte 는 word라고 함
double word는 8바이트라고 칭할것

malloc과 free 작성시 빈 부분에 대한 답을 얻어야 됨. 버퍼링도 불가능함. compaction같은 것들도 불가능함. c 의 동적 라이브러리가 가지고 있는 문제 사항들임
성능은 단순하게 throughput으로 보는 방법. 시행 수/걸린 시간

Peak Memory Utilization. 메모리 효율화의 관점. 가상 메모리가 무한이라고 생각하지만, 사실은 디스크에 맵핑되어있고, 사용할 때만 메모리 공간에 접근하기에 disk swapping같은 것들을 통해서 처리하기에 생각보다 성능이 떨어질 수 있다. 가상 메모리의 유한성을 알고 있어야 함

물리적으로 메모리에 올라가지 않는다는 것들을 이용하면. 스왑 스페이스를 따로 잡아서 disk의 일부 영역을 메모리 처럼 사용하는 방식을 통해 중간중간에 최적화가 가능해짐sbrk를 호출하면, 포인터가 증가, 감소함. 내가 이미 할당이 되어 있는 영역의 총 합을 보는 방법이 aggregate payload 부분으로 처리를 할 수 있음
이 부분은 최대치

sbrk는 현재 크기를 의미함.
당연한 이야기지만, throughput을 높이면 peak memory utilization이 안 되고, 반대도 역시 마찬가지이다.

검사는 현재 사용량/최대 사용량으로 계산한다

profile
학생의 마음가짐으로 최선을 다하자

0개의 댓글