일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 플로이드 워셜 알고리즘(Floyd-Warshall Algorithm)
- 백준 10000번
- 백준 17608번
- DFS(Depth First Search)
- 백준 2493번
- 트리(Tree)
- 그래프(Graph)
- 백준 2812번
- 백준 21606번
- 백준 1707번
- 백준 2504번
- 그리디 알고리즘(Greedy Algorithm)
- DFS
- 백준 2261번
- 동적 프로그래밍(Dynamic Programming)
- 백준 9012번
- 위상 정렬(Topology Sort)
- BFS(Breadth First Search)
- 이분 그래프(Bipartite Graph)
- 분할 정복(Divide and Conquer)
- DFS & BFS
- 알고리즘 개념
- 큐(Queue)
- BFS
- 위상 정렬(Topological Sort)
- 스택(Stack)
- 백준 1948번
- 이분 탐색(Binary Search)
- 다익스트라 알고리즘(Dijkstra Algorithm)
- 백준 18352번
- Today
- Total
목록컴퓨터 시스템 (42)
Always Be Wise
분리 가용 리스트 사용 가능한 블록을 하나의 리스트가 아닌 다수의 리스트를 사용하여 관리할 수 있다. 기본적인 아이디어는 모든 사용 가능한 블록을 특정 크기 집합들로 분리하고 각 크기 집합들 별로 별개의 리스트를 갖도록 하는 것이다. 만약 어떤 블록을 할당하고자 한다면, 여러 가지 크기 집합 중에서 적당한 크기 집합을 찾고, 다시 해당 크기 집합의 리스트를 탐색하면서 블록이 들어갈 위치를 결정하는 것이다. 만약 적당한 크기 집합을 찾지 못한다면 힙에 부가적인 메모리 요청을 하는 식으로 동작이 이루어진다. ▶ 구현 코드(First Fit) /* * mm-naive.c - The fastest, least memory-efficient malloc package. * * In this naive approa..

컴퓨터 정보의 종류 프로그램 코드(고급 언어 프로그램, 어셈블리 프로그램, 기계어 등) 데이터 모두 2진수 비트들의 조합으로 표현 프로그램 코드 컴파일러 : 고급언어 프로그램을 기계어로 변환해주는 소프트웨어 인터프리터?? 명령어 형식 명령어의 비트 수와 용도 및 필드 구성 방법을 지정해주는 형식 연산 코드 필드(Operation Code Field): CPU가 수행할 연산을 지정 오퍼랜드 필드(Operand Field): 명령어 실행에 필요한 데이터가 저장된 주소

컴퓨터 시스템 기본 구성 : 하드웨어, 컴퓨터의 물리적 부품, 입력, 연산, 제어, 기억, 출력 기능 구현 디스플레이, 메인보드(CPU, 주기억장치(Main Memory Module), 확장보드(GPU 등)), 전원 공급 장치, 광 저장 장치, 하드디스크, SSD, 키보드, 마우스 등 소프트웨어 정보처리의 종류와 수행시간을 지정해주는 명령들의 집합, 저장장치에 저장된 특정한 목적의 하나 또는 다수의 컴퓨터 프로그램 하드웨어에 의존적 시스템 소프트웨어(운영체제, 드라이버 등), 응용 소프트웨어 컴퓨터의 기본 구조 중앙처리장치(CPU), 기억장치, 입출력장치가 시스템 버스로 연결 시스템 버스 : CPU와 다른 요소들 간의 정보교환 통로 CPU의 기억 장치 액세스 동작 : 기억장치 쓰기, 읽기 CPU의 입출력..
명시적 가용 리스트 묵시적 가용 리스트는 할당 시간이 전체 힙 블록의 수에 비례한다. 그런데 사용 가능한 블록들을 일종의 명시적 자료구조로 구성하면 할당 시간을 전체 힙 블록의 수가 아닌 사용 가능한 블록의 수에 비례하게 줄일 수 있다. 예를 들어 아래와 같이 사용 가능한 블록내에 pred(predecessor)와 succ(successor) 포인터를 포함하는 이중 연결 리스트로 구성할 수 있다. 그런데 할당 시간과 별개로 반환 시간은 사용 가능한 리스트 내에서 블록 정렬 정책을 어떻게 선택하느냐에 따라 블록의 수에 비례하거나 상수 시간을 가질 수 있다. 우선, 가용 블록 리스트를 주소 순으로 관리하는 경우, 리스트 내 각 블록의 주소는 다음 블록의 주소보다 작다. 이 경우, 적당한 블록을 리스트에서 찾..

묵시적 가용 리스트 실용적인 할당기는 블록 경계를 구분하고, 할당된 블록과 가용 블록을 구분하는 데이터 구조를 필요로 한다. 대부분의 할당기는 이 정보를 블록 내에 저장한다. 아래는 블록의 구성 예시로, 한 블록은 1워드(4바이트)의 헤더와 데이터, 추가적인 패딩으로 이루어진다. 헤더는 블록 크기(헤더와 추가적인 패딩을 포함한)와 블록의 할당 여부를 인코딩한다. 헤더 다음에는 데이터가 따라온다. 데이터 다음에는 패딩이 따라올 수 있는데 이들의 크기는 가변적이다. 패딩을 해야 하는 데는 여러 가지 이유가 있다. 예를 들어, 외부 단편화를 극복하기 위한 전략이거나 정렬 요구 사항을 만족하기 위해 필요할 수 있다. 위와 같은 블록이 주어졌을 때, 힙을 연속된 할당 및 가용 블록의 배열로 아래와 같이 구성할 수..

가상 메모리는 각 프로세스들이 메인 메모리 전체를 독점적으로 사용하고 있는 것 같은 환상을 제공하는 추상화이다. 각 프로세스는 가상 주소 공간이라고하는 균일한 메모리의 모습을 갖게 된다. 아래는 몇 개의 정의된 영역으로 구성되어 있는 리눅스 프로세스들의 가상 주소 공간이다. 프로그램 코드와 데이터 코드는 모든 프로세스들이 같은 고정 주소에서 시작하며, 실행 가능 목저파일에서 직접 초기화 되어 그 크기가 고정되어 잇다. 힙 코드와 데이터 영역 다음으로 런타임 힙이 따라온다. 힙은 프로세스가 실행되면서 런타임에 동적으로 변화한다. 공유 라이브러리 공유 라이브러리의 코드와 데이터를 저장하는 영역이다. 사용자 스택 사용자 가상 메모리 공간의 맨 위에 함수 호출 등을 구현하기 위해 사용하는 사용자 스택이 위치한..

동적 메모리 할당 동적 메모리 할당이란 힙(Heap) 프로세스의 가상 메모리 영역을 이용하여 프로그램을 실행하는 중간에 메모리를 할당 받는 것을 의미한다. 동적 메모리 할당을 사용하는 이유는 프로그램을 실제로 실행하기 전까지 데이터의 크기를 알 수 없는 경우들이 있기 때문이다. 따라서 런타임 시 동적으로 메모리를 할당하여 사용하는 것이다. 할당기 이러한 동적 메모리 할당을 수행하는 할당기는 명시적 할당기와 묵시적 할당기, 두 가지 기본 유형으로 구분된다. 할당기는 힙을 다양한 크기의 블록들의 집합으로 관리한다. 각 블록은 할당되었거나 사용 가능하며, 할당된 블록은 명시적으로 또는 묵시적으로 할당기에 의해 반환될 때까지 할당된 채로 남아 있는다. 반면, 사용 가능한 블록은 명시적으로 할당할 때까지 사용 가..

프로세스(Process) 프로세스란 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 의미한다. 프로그램을 실행하면, 실행을 위한 메모리 할당이 이루어지고, 할당된 메모리 공간으로 바이너리 코드가 올라가는데 이것을 프로세스라고 부른다. 다수의 프로세스들은 동일한 시스템에서 동시에 실행될 수 있다. 이는 프로세서가 프로세스들을 바꾸어주는 방식으로 다수의 프로세스를 동시에 실행하는 것처럼 보이게 해준다. 운영체제는 문맥 전환이라는 방법을 사용해서 이러한 교차실행을 수행한다. 운영체제는 프로세스가 실행하는 데 필요한 모든 상태정보의 변화를 추적한다. 컨텍스트라고 부르는 상태정보는 PC, 레지스터 파일, 메인 메모리의 현재 값을 포함하고 있다. 운영체제는 현재 프로세스에서 새로운 프로세스로 제어를 옮기려고 ..

프로그램을 로드하고 실행할 때, 프로그램이 키보드나 모니터, 디스크, 메인 메모리에 직접 액세스 하지 않는다. 운영체제가 제공하는 서비스를 활용한다. 운영체제는 아래 그림과 같이 하드웨어와 소프트웨어 사이에 위치한 소프트웨어 계층으로 생각할 수 있다. 응용프로그램이 하드웨어를 제어하려면 언제나 운영체제를 통해서 해야 한다. 운영체제는 아래와 같은 두 가지 주요 목적을 가지고 있다. 1) 응용프로그램들이 하드웨어를 잘못 사용하는 것을 막는 것 2) 응용프로그램들이 단순하고 균일한 매커니즘을 사용하여 복잡하고 매우 다른 저수준 하드웨어 장치들을 조작할 수 있도록 하는 것 운영체제는 이 두 가지 목표를 프로세스, 가상메모리, 파일라는 근본적인 추상화를 통해 달성하고 있다. 파일은 입출력장치의 추상화이고, 가상..

컴퓨터 시스템에서 정보를 한 곳에서 다른 곳으로 이동하는 과정(하드 디스크에서 메인 메모리, 그리고 프로세서로 명령어들이 복사되는 과정)에는 시간이 소요된다. 그런데 저장 장치의 크기가 커질 수록 속도가 느려진다는 것이다. 이러한 관계는 아주 크기가 작은 프로세서와 메모리 사이에서도 유효하다. 프로세서 레지스터 파일에서 정보를 읽는 것이 메모리에서 읽는 것보다 훨씬 빠르다. 그런데 프로세서와 메모리 격차가 지속적으로 증가하고 있다는 것이다. 메인 메모리를 더 빠르게 동작하도록 만드는 것보다 프로세서를 더 빨리 동작하도록 만드는 것이 더 쉽고 비용이 적게들기 때문이다. 이에 컴퓨터 시스템 설계자들은 프로세서와 메모리 간 격차에 대응하기 위해 단기간에 필요로 할 가능성이 높은 정보를 저장하여 사용할 수 있는..