컴퓨터 사이언스

컴퓨터 사이언스/운영체제

Explicit Allocator - Explicit Free List

https://kimjingyu.tistory.com/entry/%EB%8F%99%EC%A0%81-%EB%A9%94%EB%AA%A8%EB%A6%AC-%ED%95%A0%EB%8B%B9%EA%B8%B0-%EA%B5%AC%ED%98%84 동적 메모리 할당기 구현 Dynamic Memory Allocation을 하는 이유 우리는 왜 동적 메모리 할당을 해야할까? 이유는 반대편의 정적 메모리 할당은 메모리 관리가 어렵기 때문이다. 왜냐하면, 정적 메모리 할당은 선언된 배열 요소 kimjingyu.tistory.com Explicit Free List 소개 위 포스팅에서 Explicit Allocator의 Implicit Free List 방식에 대해서 이해하고, 구현해봤었다.하지만 사실 Implicit Free ..

컴퓨터 사이언스/운영체제

인터럽트와 시스템 콜

주변장치와 입출력 장치는 CPU나 메모리와 달리 인터럽트라는 매커니즘을 통해 관리된다. 그러면 인터럽트는 왜 필요할까? 왜냐하면, 입출력 연산이 CPU 명령 수행속도보다 현저히 느리기 때문이다. 즉, OS를 사장, CPU를 고급 인력이라고 하자. 그런데 OS 입장에서 CPU가 입출력 처리를 하면 고급 인력을 낭비하는 셈이어서, 입출력 직원에게 자신의 업무가 완료되면 그때 CPU에게 작업 완료를 알리라고 지시하고, 입출력 직원의 입무가 완료되면 그때 CPU에게 작업 완료를 알린다. 여기서 입출력 직원이 CPU에게 작업 완료를 알려주는 것이 인터럽트이다. 그럼 이제 인터럽트에 대해 컴퓨터 구조 관점에서 더 자세히 알아보자. 인터럽트 정의 CPU가 프로그램을 실행하고 있을때, 입출력 하드웨어 등의 장치나 예외..

컴퓨터 사이언스/운영체제

demand-zero memory

demand-zero memory를 우리나라 말로 번역하면 무요구 메모리 영역인데, 이번 포스팅에서는 이에 대해 알아보고자 한다. 우선 heap은 다음과 같이 초기화되지 않은 데이터 영역 바로 다음부터 시작해서 높은 주소 방향으로 성장하는데, 이런 heap을 demand-zero memory라고 한다. 이러한 메모리 영역은 프로그램이 실행될 동안 메모리 사용량이 일정하게 유지되도록 설계되어 있다. 따라서 프로그램이 메모리를 요청할 때마다 즉시 할당되지 않고, 실제로 사용될 때까지 초기화되지 않은 상태로 유지된다. 이러한 방식으로 메모리 사용 효율성이 향상되고, 시스템 자원을 절약할 수 있다. 즉, demand-zeror memory는 힙 영역이 초기화되지 않은 상태로 시작되어서 프로그램이 메모리를 필요로..

컴퓨터 사이언스/컴퓨터 구조

명령어 사이클

프로그램을 실행하고, 명령어 한 줄이 동작할 때마다 메모리와 CPU에서 일어나는 마이크로 연산을 명령어 사이클이라고 한다. 명령어 사이클의 순서는 다음과 같다. 인출 사이클 -> 간접 사이클 -> 실행 사이클 -> 인터럽트 사이클 인출 사이클 : 메모리에서 명령어를 CPU로 가져오는 단계 실행 사이클 : CPU에서 명령어를 실행하는 단계. 여기서 제어 장치는 명령어 레지스터에 담긴 값을 해석하고, 제어 신호를 발생시킨다. 간접 사이클 : 명령어를 실행하기 위해 한번 더 메모리 접근을 하는 과정을 간접 사이클이라고 한다. 간접 주소 지정 방식을 사용하는 경우에 필요한 사이클이다. 인출 사이클 인출 사이클은 현재 PC에 있는 주소의 내용을 가장 최근에 인출된 명령어가 저장되어 있는 레지스터인 IR 레지스터에..

컴퓨터 사이언스/컴퓨터 구조

레지스터의 역할과 종류

레지스터 레지스터는 CPU가 요청을 처리하는데 필요한 데이터를 일시적으로 저장하는 다목적 공간이다. 레지스터의 역할 레지스터의 역할은 크게 2가지로 나눌 수 있다. 첫번째, CPU 내부에 존재하며 연산제어 및 디버깅 목적으로 사용된다. 두번째, 일시적 메모리 역할을 한다. 이로인해 CPU가 메모리에 데이터를 가져오게 되면 시간이 오래 소요되지만, CPU 내부에 있는 레지스터에 데이터를 가져오면 매우 빠른 시간내에 동작이 가능하다. 또한 연산을 위한 데이터도 저장하지만, 연산 결과도 저장한다. 레지스터의 종류 레지스터의 종류에는 DR, AR, PC, IR, MAR, MBR, PSR 등이 있다. DR 레지스터 Data Register를 DR 레지스터라고 하고, 데이터 레지스터라고 한다. 메모리에서 전달되는 ..

컴퓨터 사이언스/운영체제

DMA

DMA란 Direct Memory Access의 약자로, CPU의 중재 없이 주변장치가 메모리에 직접 접근하여 데이터를 읽고, 쓸 수 있게 해주는 시스템의 한 기능이다. 즉, DMA란 CPU의 개입 없이, 주변장치(입출력장치)와 주기억장치와의 데이터 전송이 이루어지는 방법을 통칭한다. 따라서 원래는 CPU와 주기억장치만이 시스템 버스에 접근할 수 있고, 입출력장치는 DMA와 같은 입출력 제어기에 의해 시스템 버스에 접근할 수 있다. DMA 특징 DMA를 사용하여 CPU의 개입 없이 주변장치와 주기억장치와의 데이터를 직접 전송함으로써 다음과 같은 특징을 가진다. 프로그램 수행 중에 입출력을 위한 interrupt 발생 횟수를 최소화하여 컴퓨터 시스템의 효율을 높일 수 있다. CPU는 DMA와 상태 정보 및..

컴퓨터 사이언스/컴퓨터 구조

Segmentation과 Paging의 개념 및 장단점 정리

세그멘테이션과 페이징은 컴퓨터 메모리 관리 기법이다. Segmentation 세그멘테이션은 메모리를 의미있는 단위인 segment로 나누는 방법이다. 각 세그먼트는 시작 주소와 길이를 가지며, 다른 유형의 데이터(코드, 데이터, 스택)을 위해 사용된다. 세그멘테이션은 메모리를 더 유연하게 관리할 수 있게 해주며, 프로그램의 논리적 구조를 반영할 수 있다. 장점 : 메모리를 논리적 단위로 나누어 프로그램의 구조를 반영하고, 세그먼트별 보호와 공유가 용이하다. 단점 : 외부 단편화 발생 가능성이 있고, 메모리 관리가 복잡해질 수 있다. Paging 페이징은 메모리를 동일한 크기의 블록. 즉, 페이지로 나누는 방법이다. 각 페이지는 가상 메모리 주소와 매핑되며, 페이지 테이블을 통해 물리적 메모리 주소로 변환..

컴퓨터 사이언스/Algorithm

힙 정렬

heap sort는 힙의 특성을 이용하여 정렬하는 알고리즘이다. 여기서 힙은 부모의 값이 자식의 값보다 항상 크다는 조건을 만족하는 완전 이진 트리이다. 이때 부모의 값이 자식의 값보다 항상 작아도 힙이라고 한다. 즉, 이러한 두 값의 대소 관계가 일정하면 된다. 따라서 힙에서 어떤 부모와 자식 관계를 주목할 때, 부모의 값이 자식의 값보다 항상 큰 관계가 성립한다. 따라서 힙의 가장 위쪽에 위치한 루트가 가장 큰 값이 된다. 다만, 힙에서 부모와 자식 관계는 일정하지만, 형제 사이의 대소 관계는 일정하지 않다. 따라서 힙은 형제의 대소 관계가 정해져 있지 않으므로, 부분 순서 트리(partial ordered tree)라고도 한다. 그럼 이번에는 힙의 원소를 배열에 어떻게 저장할 것인지를 알아보자. 먼..

컴퓨터 사이언스/운영체제

동적 메모리 할당기 구현

Dynamic Memory Allocation을 하는 이유 우리는 왜 동적 메모리 할당을 해야할까? 이유는 반대편의 정적 메모리 할당은 메모리 관리가 어렵기 때문이다. 왜냐하면, 정적 메모리 할당은 선언된 배열 요소의 수가 사용된 요소의 수보다 많을 수도 있고, 선언된 배열 요소의 수가 사용된 요소의 수보다 적을 수도 있고, 배열 선언할 때 배열 길이에 변수를 설정하면 에러가 발생할 수 있기 때문이다. 즉, 정적 메모리 할당은 프로그램 컴파일시에 메모리 statck에 얼마만큼의 크기로 할당을 해야하는지 결정되기 때문에 컴파일 이후 크기가 변경될 수 없다. 이러한 문제점을 해결하고자 메모리 관리의 어려움을 해결해주는 Runtime시 메모리 heap에 데이터를 동적으로 할당해주는 Dynamic memory ..

컴퓨터 사이언스/운영체제

동적 메모리 할당

C 프로그래머들은 대개 추가적인 가상메모리를 런타임에 획득할 필요가 있을 때, 동적 메모리 할당기를 사용하는 것을 선호한다. 여기서 동적 메모리 할당기는 heap이라고 하는 프로세스의 가상메모리 영역을 관리한다. 물론 자세한 내용은 시스템마다 다르지만, 힙은 미초기화된 데이터 영역 직후에 시작해서 위쪽으로 커지는 무요구 메모리 영역이라고 가정한다. 이때, 각각의 프로세스에 대해서 커널은 힙의 꼭대기를 가리키는 변수 brk를 사용한다. 그리고 할당기는 힙을 다양한 크기의 블록들의 집합으로 관리하는데, 각 블록은 할당되었거나 가용한 가상메모리의 연속적인 묶음이다. 할당기들은 2가지의 기본 유형이 있고, 두 유형 모두 응용 프로그램이 명시적으로 블록을 할당하도록 요구한다. 다만, 이들은 어떤 엔트리가 할당된 ..

kimjingyu
'컴퓨터 사이언스' 카테고리의 글 목록 (3 Page)