이번글은 페이징에 대한 글입니다. 이전에 https://cjbworld.tistory.com/36 스와핑에 대해서 설명하던 도중 '외부 단편화'를 해결하는 방법으로 잠깐 소개했었는데요, 이번글은 외부 단편화를 해결하기도 하고 메모리 보다 큰 프로세스를 '적재' 할 때에도 사용되는 '가상 메모리'에 대한 정리글입니다! 가상 메모리란? 가상 메모리는 실행하고자 하는 프로세스의 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 도 큰 프로세스를 실행할 수 있게하는 기술 입니다. 이런 가상 메모리를 관리하는 기법 중에는 크게 '페이징'과 '세그멘테이션'이 있지만 페이징에 대해 알아보도록 하겠습니다. 아무튼 가상 메모리를 관리하는 기법인 '페이징'을 사용하는 외부 단편화 문제와 물리 메모리의 크기보다 더 큰 프..
이전에 힙을 구현한적이 있는데 다시 정리해서 구현한 글입니다. 힙? 힙이란? '이진트리'이면서 '완전 이진트리'입니다. 힙은 max heap, min heap으로 나뉩니다. 중요한 점은 heap은 '완전 이진트리'라는 점입니다. 이진트리는 자식의 최대 개수가 두개인 트리의 형태를 의미합니다. 완전 이진트리는 마지막 레벨을 제외하고 모든 레벨이 완전히 채워져 있는 이진트리입니다. 트리에 대한 개념은 https://code-lab1.tistory.com/8
이번글은 Minimum cost Spanning Tree 줄여서 MST인 '최소 비용 신장 트리'에 대한 글입니다. 먼저 MST가 무엇인지 알아보기 전에 '경로(Path)'가 무엇인지 알아보도록 하겠습니다. 경로(path) ''경로(path)'란? 특정 그래프에서 정점과 정점을 잇는 간선을 순서대로 나열한 것을 의미합니다. 그리고 동일한 간선(edge)를 중복하여 포함하지 않는 경로를 '단순 경로(simple path)'라고합니다. 이런 그래프가 있을 때 정점 A에서 C까지 이르는 경로는 A-B-C. A-D-C, A-B-D-C, A-D-B-C 정도가 있겠군요. 단순경로가 아닌 경우에는 이를테면 A-D-B-A-B-C 같은 경우가 있습니다. 최소 비용 신장 트리 A-B-D-A의 경우에는 단순경로입니다. 위에..
이번글은 저희같은? 사용자가 C++코드를 작성할 때 왜 헤더파일과 cpp파일로 나누어서 코드를 작성하는 지에 대한 글입니다. 저또한 그냥 아무런 이해없이 남들이 다 그렇게 쓰니까 아무생각없이 썻었는데 inline이나 템플릿을 공부하면서 부터 꼬이기 시작해서 다시 C++의 Build Process부터 공부한뒤 이해한 내용을 정리하였습니다. Build Process C++의 빌드 프로세스는 크게 아래 세가지 단계로 순자적으로 진행이 됩니다. - PreProcess - Compile - Link 우분투 환경에서 main.cpp, hello.cpp만들고 아래와 같이 코드를 작성해주도록 하겠습니다. 요로코롬 나누어서 컴파일 한뒤 실행하면 당연히 컴파일 자체가 안됩니다. 너무나도 당연하게 main.cpp에서 Hel..
이번글은 주기억 장치인 메모리에 프로세스를 연속적으로 공간을 할당하는 방식인 "연속 메모리 할당"을 할경우 고려해야할 사항중 "스와핑"이라는 부분에 대해서 알아보도록 하겠습니다. 스와핑이란? 메모리에 적재된 프로세스들 중에서는 현재 실행중인 프로세스가 있을 수 있고 실행되지 않는 프로세스들이 있을 수 있습니다. 실행되지 않는 것의 예로는 입출력 요구로 대기상태에 빠진 프로세스들이라던지 아니면 오랫동안 사용되지 않은 프로세스들 등등이 여기에 포함됩니다. 이러한 실행되지 않는 프로세스들을 임시로 보조기억장치 일부 영역을 "쫒아내고" 그렇게 해서 생긴 "빈 공간"에 또 다른 프로세스를 적재하여 실행하는 방식을 "스와핑"이라고 합니다. 쫒겨나는 보조기억장치의 일부 영역을 "스왑 영역(swap space)"이라고..
이번글은 BFS에 대한 글입니다! 그래프와 BFS란? 그래프란 정점과 간선으로 이루어진 자료구조입니다. 실생활에서도 많이 쓰이기 때문에 그래프는 중요한 개념입니다. 종류로는 "무방향 그래프", "완전 그래프", "가중치 그래프" 등등 종류가 많습니다. 그래서 탐색하는 방법이 그래프 구현에 따라 달라집니다. 그럼에도 불구하고 그래프의 모든 정점을 탐색하는 그래프가 대표적으로 아래 두가지가 있습니다. - DFS : Depth First Search - BFS : Breadth First Search 이중에서도 BFS를 구현하는 방법을 알려드리도록 하겠습니다. 일단 그래프를 탐색하려면 그래프가 있어야겠죠? 그래프를 구현하는 대표적인 방법두가지를 알려드리도록 하겠습니다. - 인접 리스트를 통한 그래프 구현 =>..
[06-2] 이번글은 메모리의 논리주소와 물리주소에 대한글입니다. 먼저 메모리란 무엇인지에 대해서 알아보도록 하겠습니다! 주기억 장치의 종류로 크게 RAM, ROM가 있습니다. 이중에서도 "메모리"라는 용어는 보통 RAM을 가르키는 단어입니다. 그래서 RAM(메모리)에 대해서 살펴보도록 하겠습니다!!ㅎㅎ 참고로 ROM에 대한 부분은 https://information-factory.tistory.com/270 RAM(램)과 ROM(롬) 차이점 쉽게 이해하기! RAM 이란? ROM 이란? 무엇일까? RAM은 우리가 흔하게 보는 부품입니다. 바로 삼성전자와 SK하이닉스에서 세계에서 제일 잘 만드는 부품으로 "초록색의 긴 막대기 같은 부품"입니다. RAM의 약어는 Random information-factor..
이번글은 프로세스와 스레드에 대해 알아보도록 하겠습니다. CPU와 코어 그전에! CPU를 잠깐 다시살펴보면 "명령어를 실행하는 부품"을 CPU로 설명을 많이 드렸었는데 현대의 CPU는 "명령어를 실행하는 부품"들로 이루어진 부품입니다. 이 명령어를 실행하는 부품을 "코어"라고합니다. 제 CPU의 성능은 이렇습니다. 클럭이 3.35GHz 정도이고 코어가 8개, 논리 프로세서가 16으로 잡히네요... 코어안에는 필수레지스터들(프로그램 카운터)과 ALU L!, L2 캐시 등등 많이 들어있을 텐데 이것들이 총 8개 있다는 말입니다. 그리고 논리 프로세서는 16개로 코어 하나당 하드웨어적 스레드가 2개씩 있다고 보면 되겠습니다. 보통 "스레드"라고 하면은 프로세스 상의 스레드를 떠올리시기 쉬운데 스레드는 뭐냐? ..