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

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

File Descriptor

파일 디스크립터란 리눅스 혹은 유닉스 계열 시스템에서 프로세스가 파일을 다룰 때 사용하는 개념이다. 즉, 프로세스에서 특정 파일에 접근할 때 사용하는 추상적인 값이다. 이러한 파일 디스크립터는 일반적으로 0이 아닌 정수값을 가진다. 흔히 유닉스 시스템에서 모든 것을 파일이라고 한다. 일반적인 정규파일을 포함해 디렉토리, 소켓, 파이프, 블록 디바이스, 케릭터 디바이스 등 모든 객체들을 파일로 관리한다. 따라서 유닉스 시스템에서 프로세스가 이 파일들을 접근할 때 파일 디스크립터라는 개념을 사용한다. 과정은 다음과 같다. 프로세스가 실행중에 파일을 Open하면 커널은 해당 프로세스의 파일 디스크립터 숫자 중 사용하지 않는 가장 작은 값을 할당해준다. 그 다음 프로세스가 열려있는 파일에 시스템 콜을 이용해서 ..

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

Explicit Allocator - Segregated Free List

https://kimjingyu.tistory.com/entry/Explicit-Allocator-Explicit-Free-List 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 Segregated Free List 소개 위 포스팅에서 살펴본 바로 단일 연결 블록 리스트를 사용하는 할당기는 한 ..

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

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는 힙 영역이 초기화되지 않은 상태로 시작되어서 프로그램이 메모리를 필요로..

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

DMA

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

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

동적 메모리 할당기 구현

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

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

동적 메모리 할당

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

kimjingyu
'컴퓨터 사이언스/운영체제' 카테고리의 글 목록