목록분류 전체보기 (198)
포도가게의 개발일지
Virtual Memory Management Non-continuous allocation 사용자 프로그램을 여러개의 block으로 분할 실행시, 필요한 block들만 메모리에 적재 - 나머지 block들은 swap device에 존재 기법 - Paging system - Segmentation system - Hybrid paging/segmentation system Block Mapping 사용자 프로그램을 block 단위로 분할/관리 - 각 block에 대한 address mapping 정보 유지 Virtual address : v = (b,d)로 구성 b : block number -> 어느 블록인지 d : displacement(offset) in a block -> 블록의 시작점에서 얼마나..
https://www.youtube.com/watch?v=o1TB9NWvG9w Variable Partition Multiprogramming 초기에는 전체가 하나의 영역 프로세스를 처리하는 과정에서 메모리 공간이 동적으로 분할 No internal fragmentation은 필요할때마다 전체에서 잘라서주기때문에 발생하지 않는다. 배치전략 (Placement strategies) First-fit(최초 적합) : 처음만나는 맞는 공간을 선택 - 충분한 크기를 가진 첫 번째 partition을 선택 - Simple and low overhead - 공간 활용률이 떨어질 수 있음 (처음 만나는애가 자기보다 큰 메모리를 만날 경우) Best-fit(최적 적합) : process가 들어갈 수 있는 partiti..
https://www.youtube.com/watch?v=te-GU7NKa5Y Memory Allocation continuos Memory Allocation(연속 메모리 할당) 메모리 구성 정책 - 메모리에 동시에 올라갈 수 있는 프로세스의 수 - 각 프로세스에게 할당되는 메모리 공간 크기 - 메모리 분할 방법 uni-programming : 프로세스가 하나만 올라가는 경우 - 가장 간단한 메모리 관리 기법 - 하나의 프로세스만 메모리 상에 존재 1. 문제점 : 프로그램의 크기 > 메모리 크기 보다 큰 경우 해결법 - Overlay structure(프로그램을 나눠준다) - 메모리에 현재 필요한 영역만 적재 - 사용자가 프로그램의 흐름 및 자료구조를 모두 알고 있어야 함 - 공통부분은 올리고 남은 프..
https://www.youtube.com/watch?v=EdTtGv9w2sA 너무 강의가 좋은것 같다.. - 캐시 라인으로 가져오면서 만일 a[j][i]로 코드를 짜게 되면 매번 캐시 미스가 발생하여 캐시메모리 방식을 쓰는것이 손해지만 같은 for문이라도 엄청난 속도차이를 만들어 낼 수 있다. a[i][j]인 경우 캐시히트가 발생하면서 a[0][15]까지는 캐시히트가 발생하면서 병목현상을 확실하게 줄일수있다.
https://www.youtube.com/watch?v=es3WGii_7mc 메모리는 크게 두 분류로 나눠 지는데 - 레지스터, 캐시메모리는 cpu 내부에 있으며 cpu 즉 hw가 관리한다. - 메인메모리(램), ssd, hdd 같은 경우는 cpu 밖에 있으며 sw인 os가 관리한다. -> 이번 페이지에서는 sw가 관리하는 메모리를 다루는것에 대해 작성 되었다. 메모리 용어 정리 block - 보조기억장치(disk)와 주기억장치(ram, memory) 사이의 데이터 전송단위 - size : 1~4kb이다 word - 주기억장치와 레지스터 사이의 데이터 전송단위 - size : 16~64bits이다. * 흔히들 말하는 32bit 64bit 컴퓨터는 레지스터가 한번에 읽어오는 word에 단위이다 64bit..
균형을 이루기 위한 red black tree의 특징 (1) 노드는 레드 혹은 블랙 색상 중 하나를 갖는다. (2) 루트 노드는 블랙이다. (3) 모든 리프 노드(또는 NIL 노드)들은 블랙이다. (4) 레드 노드의 자식 노드들은 모두 블랙이다. (레드 노드는 연달아 나타날 수 없고, 블랙 노드만 레드 노드의 부모가 될 수 있다.) (5) 각 노드로부터 해당 노드가 속한 하위 리프 노드까지의 단순 경로 상에는 블랙 노드 개수가 동일하다. (Black Height) 삭제(Removal) - 이진 탐색 트리에서 두 개의 자식 노드를 가진 노드를 지울 때, 우리는 노드의 왼쪽 서브트리에서 최댓값을 찾거나, 오른쪽 서브트리에서 최솟값을 찾아 해당 값을 지우고자 하는 노드로 옮긴다. 이 때, 최댓값 또는 최솟값에..
레드-블랙 트리란? - BST 이진탐색 트리에서 파생된? 근사적 Balanced binary search tree - 때문에 일반 BST는 최악의 경우 트리의 깊이만큼 탐색시간이 걸리지만 - balanced tree는 최악의 경우여도 lonN의 시간이 걸리게 된다. 균형을 이루기 위한 red black tree의 특징 (1) 노드는 레드 혹은 블랙 색상 중 하나를 갖는다. (2) 루트 노드는 블랙이다. (3) 모든 리프 노드(또는 NIL 노드)들은 블랙이다. (4) 레드 노드의 자식 노드들은 모두 블랙이다. (레드 노드는 연달아 나타날 수 없고, 블랙 노드만 레드 노드의 부모가 될 수 있다.) (5) 각 노드로부터 해당 노드가 속한 하위 리프 노드까지의 단순 경로 상에는 블랙 노드 개수가 동일하다. (B..
1. 단순 포인터 #include int main(){ int a = (int *)malloc(sizeof(int)); ## a의 저장된 malloc의 주소를 보여줌 printf("%p", a); ## 포인터 변수 a의 주소를 보여줌 printf("%p", &a); ## go to malloc의 주소 만약 말록 주소위치의 0번째값에 10이 저장되있으면 ## 10을 출력해준다. printf("%p", *a); } 2. 함수 포인터 #include ## 함수형 포인터도 똑같이 a,b라는 포인터형 변수를 생성 ## *은 세가지 정의를 갖는데 포인터 선언*은 그냥 얘 포인터야 ## 두번째 *은 곱하기를 의미 ## 세번째 *은 역참조 dereference를 의미 ## 역참조는 만약 포인터 a의 주소값이 저장되어있..