본문 바로가기

반응형

전체 글

(174)
[ 자료구조 ] 복사 생성자 & 배정 연산자, 얕은 복사 & 깊은 복사, 프랜드 함수 & 클래스, 중복된 헤더 피하기 자료구조를 공부하기 위해서는 클래스에 대한 이해가 선행되어 있어야 한다. 그래서 한동안은 클래스에 대한 글이 될 것 같다. 바로 본론으로 들어가자. [1] 메모리 유출(Memory Leak) C++에서는 새로운 메모리 공간이 필요할때마다 new를 통해 자원을 요청할 수 있다. 이를 '동적 할당'이라고 한다. 동적 할당은 스택 메모리가 아닌 힙 메모리를 사용하는 특징이 있다. 여기서 힙 메모리는 자유 저장소(free store)라고 부르기도 한다. 연산자 new는 주어진 타입의 객체를 생성하는데 필요한 메모리를 자유 저장소로부터 동적으로 할당하여 이 객체에 대한 포인터를 반환한다. 그런데 동적으로 할당된 객체들은 할당 후 삭제하지 않으면 문제가 발생할 수 있다. 만약에 새로운 객체 p를 동적으로 할당한 뒤..
[ 자료구조 ] 자료구조 포스팅을 시작하며 오늘부터는 틈틈이 자료구조를 정리할 생각이다. 대학교 강의자료를 그대로 쓰려고 했으나 운영체제를 정리할 때 전공책을 읽으면서 정리하는게 훨씬 효율적일거 같아 전공서적을 하나 구입했다. 내가 공부하는 책은 'C++로 구현하는 자료구조와 알고리즘' 이다. 가격이 무려 38,000 원이나 하는데(원서는 더 비쌈..) 최대한 뽕을 뽑아야겠다. 자료구조 정리를 완료하는 그날까지 달려보자!
[ 백준 2290 ] LCD Test (C++) https://www.acmicpc.net/problem/2290 2290번: LCD Test 첫째 줄에 두 개의 정수 s와 n이 들어온다. (1 ≤ s ≤ 10, 0 ≤ n ≤ 9,999,999,999)이다. n은 LCD 모니터에 나타내야 할 수 이며, s는 크기이다. www.acmicpc.net 단순 구현 문제. 한 번쯤 풀어보면 나중에 비슷한 문제를 만났을 때 훨씬 수월하게 풀 수 있는 유형의 문제라고 생각한다. 우선 0 ~ 9 까지 lcd 판에 그리는 규칙부터 정의하자. 나는 아래와 같이 정의했다. 0 ~ 9 까지 각 숫자마다 출력해줘야 하는 번호를 배열로 나타내면 아래와 같다. int rules[10][7] = { {1,1,1,1,1,1,0}, // 0 {0,1,1,0,0,0,0}, // 1 {..
[ 운영체제 ] HDD 구조, HDD 스케줄링, SSD, 디스크 관리(Disk Management) Hard Disk Drive (HDD) 하드 디스크는 자기 패턴으로 정보를 기록한다. 쉽게 말하면 수많은 CD를 밀집시켜 놓은 구조로 생각하면 된다. 하드 디스크의 구조를 그림으로 살펴보면 아래와 같다. Read-write head : 데이터를 읽고 쓰는 역할을 담당 Disk arm : 헤드를 데이터가 있는 곳으로 움직이는 역할 Spindle : 플래터를 돌려주는 역할 Platter : CD 한 장으로 생각하면 된다. 위, 아랫면에 자기적 성질을 이용해 정보를 저장 Track : 플래터의 동심원 일부 Sector : 하드 디스크의 최소전송 단위로 트랙의 일부분. 섹터의 집합이 트랙이다. 섹터는 고정 크기를 가지는데 2010년까지는 512B, 현재는 일반적으로 4KB의 크기를 가진다 Cylinder : 다..
[ 백준 16506 ] CPU (C++) https://www.acmicpc.net/problem/16506 16506번: CPU 디지털하드웨어설계 과목의 최종 프로젝트는 16-bit CPU를 설계하고 Verilog 언어로 구현하는 것이다. 본인이 구현한 CPU가 제대로 동작하는지 테스트하기 위해서는 기계어 코드를 입력으로 주어야 www.acmicpc.net 단순 구현 문제라 그냥 풀면 된다. 풀이 방법은 수없이 많을 것으로 생각된다. 나는 이 문제를 두 가지 함수를 이용해서 풀었다. 첫째로, 십진수를 이진수로 변환하는 함수가 필요하다. 이 과정에서 원하는 비트수만큼 0으로 채워주야 한다. 함수 입력값은 십진수 num과 비트수 크기에 해당하는 range다. 십진수를 이진수로 변환하는 알고리즘은 계속 2로 나눈 다음에 나머지를 더해주면 된다. /..
[ 운영체제 ] 쓰레싱(Thrashing)과 작업 공간(Working Set), 지역성(Locality) 메모리 파트에서 중요한 개념을 하나 놓쳐서 급히 쓴다. 쓰레싱과 작업 공간에 대해 자세히 다뤄보자. 두 가지 개념을 완벽하게 이해하는게 이 글의 학습목표! [1] 쓰레싱 (Thrashing) 쓰레싱을 간단하게 정리하면 'Page Fault가 시스템의 허용 수준을 넘어가는 현상' 으로 요약할 수 있다. Page fault가 많이 발생하는 경우는 두 가지로 나눌 수 있다. 1) 메모리 허용량보다 더 많은 프로세스를 동시에 실행하려고 할 때 말 그대로 메모리 용량을 초과하는 경우다. 이렇게 되면 많은 프로세스 중에 일부만 메모리 위에 올라가고, 나머지는 저장장치 안에 있게 되므로 스케줄링이 계속 됨에 따라 page fault 가능성이 매우 높아진다. 2) 스케줄러가 CPU 이용률만 보고 계속해서 새로운 프로세..
[ 백준 3568 ] iSharp (C++) https://www.acmicpc.net/problem/3568 3568번: iSharp 입력으로 주어진 변수 선언문을 문제의 조건에 맞게 변형한 뒤, 한 줄에 하나씩 출력한다. 변수형과 변수명 사이에는 공백이 하나 있어야 한다. 출력은 입력으로 주어진 변수 선언문에서 변수가 www.acmicpc.net 단순 구현 문제라 그냥 풀면 됐던 문제. 우선 입력값을 분리하는 split 함수를 먼저 보자. 아래의 아이디어를 그대로 구현하면 된다. 예제의 입력값 int& a*[]&, b, c*; 을 분리하려면, 공백을 기준으로 분리한 다음 각 문자열을 벡터에 넣어주면 된다. 나는 string의 'find' 함수를 써서 구현했다. 어렵지 않으니 아래 정답 코드를 보면 쉽게 이해할 수 있을 것이다. 그 다음으로 변수..
[ 운영체제 ] 가상 메모리2 - Modify bit(Dirty bit), 페이지 교체 알고리즘 운영체제에는 다양한 페이지 교체 알고리즘이 있다. 페이지 교체 알고리즘이 필요한 이유는 page fault ratio를 낮추기 위해서지만, 근본적인 원인은 메인 메모리의 용량이 한정적이기 때문이다. Page Fault가 발생했는데 메인 메모리가 가득 찼다면 페이지를 교체해야 한다. 여기서 교체 대상이 되는 페이지를 'victim page'라고 한다. 위 그림을 보면 victim 페이지가 SSD에 swap out 되고, 페이지f 가 swap in 됐다. 페이지 테이블에서 valid bit의 변화를 보면 victim 페이지는 i로, 페이지f 는 v로 수정됐다. 즉, victim 페이지는 메인 메모리 상에 없다는 뜻이고, 페이지f 는 메인 메모리 상에 있다는 뜻이다. Valid bit는 찾고자 하는 페이지가 ..

반응형