목록전체 글 (431)
mojo's Blog
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Gas8p/btrg5CVTze3/yGLM6r6WWuRo1DRnr43Mn0/img.png)
지난시간에 했던거 복습 Virtual memory 1. time sharing => fork() 를 띄우면 DRAM 에 올리고 다른 녀석을 fork() 하면 DRAM 에 있던걸 Disk 로 내리고 다시 DRAM 으로 올리는 작업... 딱 봐도 overhead가 상당하군? 2. static relocation (space sharing) => 올릴 때 OS가 program을 rewrite 한다. (주소 0x1000, 0x2000 와 같이 설정했었지) 문제는 privacy 와 location change 가 안된다는 점 3. Dynamic relocation => MMU(Memory Management Unit로 hardware) 를 이용함 그리고 Base + Bounds register 를 통해 physi..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dM7yxC/btrgXgMmKnp/FEIZZIr3rPyynWS69kX02k/img.png)
문제 링크 => 2829번: 아름다운 행렬 (acmicpc.net) 2829번: 아름다운 행렬 첫째 줄에 행렬의 크기 N이 주어진다. (2 ≤ N ≤ 400) 다음 N개의 줄에는 행렬의 성분이 공백으로 구분되어 주어진다. 각 성분은 [-1000,1000] 범위 안에 들어있다. www.acmicpc.net Brute Force 문제이다. 부 대각선에 대한 합들을 미리 구하여 모든 주 대각선을 탐색하면서 미리 구한 값들을 빼는 방식으로 접근했다. Solution Code #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include #include #include #define endl..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dkqdNp/btrgBCbTIsY/PxCxBrs35RDwKP2q1sZIfK/img.png)
이전에 배웠던거 잠깐 복습하기... 저번에 Memory virtualization 에 대해서 두가지 방법에 대해서 배웠다. 첫 번째 : Time Sharing of Memory 먼저 Context switch 할 때 CPU를 점유하는 건 한 개의 프로세스만 점유했었다. 시분할 한 것처럼 메모리 또한 시분할을 해보자라는게 바로 Time Sharing 이다. 그러나 Disk 로 내렸다가 다시 올리는 과정 즉, overhead가 큰 문제점이 있다. 그래서 이러한 overhead를 해결하기 위해서 물리적으로 남아있는것처럼 다른 주소를 쓸 수 있도록 하면 되지 않을까? 라는 방법이 Static Relocation 이다. 두 번째 : Static Relocation 메모리에 로딩을 하는 과정에서 프로그램을 rewr..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bM3u7c/btrgk9I06po/RvjmzKMmhaYTINWzZvN6b1/img.png)
What is memory virtualization? - OS virtualizes its physical memory. - OS provides an illusion memory space per each process. - It seems to be seen like each process uses the whole memory. 각 프로세스들마다 전체 메모리를 가지고 있는 것처럼 환각을 제공한다. Address space 는 process마다 갖고 있는 것이다. Disk 에서 목적 파일 a.out이 들어가고 실행하면 text로 이동한다. 여기서 0x00000000 ~ 0xFFFFFFFF 한 process가 전체 process address space 를 정의하는 방법이 아니라 virtual mem..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ML0GQ/btrfXy9BUWA/5oJLrG1UJ9X0KEcKRT16z1/img.png)
문제 링크 => Problem - C - Codeforces Problem - C - Codeforces codeforces.com Topological Sorting 과 dynamic programming 의 짬뽕 문제이다. 백준에서만 풀었던 위상정렬을 여기서 풀게되서 뭔가 감회가 새로웠다. 문제는 x 번째 책을 읽기 위해서 미리 읽어야 할 책들의 list 가 n개 주어진다. 이때, 책을 모두 읽기 위해 걸리는 시간을 구해야 한다. 읽어야 할 책 : x, 미리 읽어야 할 책 : y 라고 할 때 x의 진입차수를 높여주고 단방향으로 y => x 를 이어주도록 한다. 그렇게 모든 세팅이 끝나면 모든 책들이 읽힐 수 있는지 확인하는 과정을 거친다. 즉, 진입차수가 0인 책들을 발견해가면서 모든 책을 읽을 수 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/74gmz/btrf5jJ70fJ/Nso6tP80ymNpVVlqldkqIK/img.png)
문제 링크 => Problem - B - Codeforces Problem - B - Codeforces codeforces.com 홀수로 구성된 배열 A와 짝수로 구성된 배열 B가 존재할 때, A[0] < B[0] 을 만족하도록 swap이 이루어진 갯수의 최솟값을 구하는 문제이다. 문제 접근 방법은 다음과 같다. 1. 배열 A의 원소 x에 대하여 m[x] = i 라고 설정함 ex ) A = [1, 3, 5, 7, 9] 에 대하여 각각 맨 앞에 숫자를 배치하도록 하기 위해 0, 1, 2, 3, 4 만큼 이동 2. 배열 B의 원소 x와 인덱스 i에 대하여 (x, i) 값을 담을 수 있는 벡터 v에 대하여 v.push_back({x, i}), check[i] = 1 라고 설정한 후에 x를 기준으로 오름차순으..