y0u_bat
how2heap first_fit.c #include #include #include int main(void) { char *a = malloc(512); char *b = malloc(256); char *c; strcpy(a,"this A"); printf("[a]: %s %p\n",a,a); free(a); c = malloc(500); printf("[c]: %p\n",c); strcpy(c,"this C"); printf("[c]: %s %p\n",c,c); printf("[a]: %s %p\n",a,a); } 간단하게 설명하자면, malloc 같은경우 bin이라는 구조가 있고, 크기에 따라 large bin, small bin fastbin으로 나누어지고, fastbin 같은 경우, free..
OS-4 운영모드와 메모리 관리 기법 x86와 x86-64 프로세스에서 지원하는 메모리 관리 기법은 크게 2가지이다. 세그먼테이션(Segmentation) 페이징(Paging) 둘다 모두 메모리를 나누는 것이고 차이점은 세그먼테이션은 원하는크기로 짤라 쓰는 방식이고, 페이징 같은경우에는 정해진 크기로 짤라져 있는 조각을 모아 원하는 크기로 관리하는 방식이다. 세그먼테이션은 세그먼트의 시작주소 or 디스크립터라고 불리는 자료구조의 위치를 설정 해야된다. 페이징은 CR3 레지스터에 페이지 디렉터리라 불리는 자료구조의 물리주소를 설정해야지 사용 가능하다. 리얼 모드의 메모리 관리 방식 최대 1MB까지 주소공간을 사용하며, 세그먼테이션만 지원한다. 세그먼트 크기는 64k로 고정이며, 세그먼트 시작 주소는 코드나..
OS-3 레지스터 레지스터 종류 AX,BX,CX,DX,SI,DI,SP,BP,R8~R15 - 범용 레지스터 CS,DS,ES,FS,GS - 세그먼트 레지스터 CR0,CR1,CR2,CR3,CR4 - 컨트롤 레지스터 범용 레지스터 역할 AX - 산술 연산을 수행할때 누산기로 사용 BX - 데이터의 어드레스를 지정할때 데이터 포인터로 사용 CX - 루프문 or 문자열 카운터로 사용 DX - I/O 어드레스를 지정할때 사용, 산술연산을 수행할때 보조 레지스터로 사용 SI - 문자열에 관련된 작업을 수행할때 원본 문자열의 인덱스로 사용 DI - 문자열에 관련된 작업을 수행할때 목적지 문자열의 인덱스로 사용 SP - 스택의 포인터로 사용 BP - 스택의 데이터에 접근할때 데이터의 포인터로 사용 R8~R15 - x86-..