no image
Team Session - File Descriptor(FD)
파일 디스크립터(FD, File Descriptor) 네트워크 소켓과 같은 파일이나 기타 입/출력 리소스에 액세스하는 데 사용되는 추상표현 ‘0이 아닌 정수’ (’Non-negative Integer’) : 음수가 아닌 0과 양수인 정수 값 음수는 오류 조건을 나타내기 위해 예약된다. 시스템으로부터 할당받은 파일이나 소켓을 대표하는 정수 POSIX API 정수 값 이름 0 표준 입력(stdin) 1 표준 출력(stdout) 2 표준 에러(stderr) 위의 3가지 디스크립터는 프로그램이 프로세스로 메모리에서 실행을 시작할 때 언제나 열린 채로 동작한다. ⚠️ 프로그램에서 파일 디스크립터를 참조할 때는 번호를 쓸 수도 있지만 가능하면 ‘UNISTD.h’ 에 POSIX 이름을 쓰는 편이 좋다. 1. [fil..
2022.12.11
no image
Malloc Lab 구현
☁️ Overview- 연관 포스팅(동적 메모리 할당 개요) Ch9. Dynamic Memory Allocation(9.9)추가적인 가상메모리를 런타임에 획득할 필요가 있을 때 동적 메모리 할당을 사용한다. 편리성, 호환성 Intro. 동적 메모리 할당 malloc, garbage collector 힙(heap)을 관리한다. 프로세스의 가상메모리olive-su.tistory.com  📂 File structuremalloc-lab ├── Makefile # 테스트를 실행하는 makefile ├── README.md ├── clock.c ├── clock.h ├── config.h ├── fcyc.c ├── fcyc.h ├── fsecs.c ├── fsec..
2022.12.08
no image
Team Session - Data Segment
Segment 메모리 보호를 수행하는 일반적인 방법 가운데 하나 💡 페이징 : 프로세스를 물리적인 단위로 분할하여 메모리에 적재 세그먼트 방식은 논리주소를 물리주소로 매핑하는 방식으로 구현한다. 세그먼트는 논리적인 단위로 메모리를 로드하기 때문에 메모리 보호가 쉽다. 각 세그먼트들의 크기는 균일하지 않다. 컴파일러에 의해 자동적으로 프로그램이 로드될 때 세그먼트가 나뉘게 된다. 간단히 말해서 메모리에 적재될 때 나뉘는 영역! Memory Structure 주소 영역 내용 메모리 할당 시기 0x0000 (Low Address) code(text) * 코드, 함수, 제어문 등 실행할 프로그램의 코드가 저장되는 영역 * Compile Time Memory 할당 * 크기 고정 data data * 초기값이 있는..
2022.12.08
no image
Ch9. Dynamic Memory Allocation(9.9)
추가적인 가상메모리를 런타임에 획득할 필요가 있을 때 동적 메모리 할당을 사용한다. 편리성, 호환성 Intro. 동적 메모리 할당 malloc, garbage collector 힙(heap)을 관리한다. 프로세스의 가상메모리 영역 초기화되지않은 데이터 영역 직후에 시작해서 위쪽(낮은 주소에서 높은 주소로) 커지는 메모리 영역 각각의 프로세스에 대해서 커널은 힙의 꼭대기를 가리키는 변수 brk(break) 를 사용한다. 힙을 다양한 크기의 블록들의 집합으로 관리한다. 각 블록은 할당 or 가용한 가상메모리의 연속적인 묶음이다. 할당된 블록 : 응용하기 위해 명시적으로 보존된다. Ex. C의 malloc으로 동적 메모리가 할당된 상태 할당된 블록은 메모리 할당기에 자신에 의해 ‘명시적(..
2022.12.06
no image
Ch1. A Tour of Computer Systems(1.7 ~ 1.9)
1-7. The Operating System Manages the Hardware 운영체제 : 하드웨어와 소프트웨어 사이에 위치한 소프트웨어 계층 응용 프로그램이 하드웨어를 제어하려면 언제나 운영체제를 통해야한다. 운영체제의 목적 응용프로그램들이 하드웨어를 잘못 사용하는 것 방지 응용프로그램이 저수준의 하드웨어 장치를 효율적으로 조작할 수 있도록 함 운영체제의 추상화 운영체제의 목적을 추상화(abstraction)를 통해 달성한다. 파일 : 입출력 장치의 추상화 가상메모리 : 메인 메모리와 디스크 입출력 장치의 추상화 프로세스 : 프로세서, 메인 메모리, 입출력 장치 모두의 추상화 결과 💡 운영체제에서의 추상화(Abstraction)? 정의하고자 하는 대상의 디테일, 자세하고 사소한 특징들을 숨기고 주..
2022.12.06
no image
RB Tree 구현
연관 포스팅(RB Tree 이론) [Krafton Jungle | TIL_22.11.27] RB Tree 이론 균형 이진 탐색 트리(Balanced BST) 루트 노드로 부터 시작해서 찾고자하는 key 를 각 레벨에 따라 한번의 비교를 통해 key 값을 찾을 수 있다. $O(h)$ (h : 높이) 의 시간 복잡도를 가진다. insert, delete 연 olive-su.tistory.com ☁️ Overview 이진 트리의 특성을 기반으로 한다. RB Tree의 특성 모든 노드는 레드이거나 블랙이다. 루트는 블랙이다. 모든 리프는 블랙이다. 노드가 레드이면 그 노드의 자식은 모두 블랙이다. 각 노드로부터 그 노드의 자손인 리프로 가는 경로들은 모두 같은 수의 블랙 노드를 포함한다. ADT(Abstract..
2022.12.06
no image
RB Tree 이론
균형 이진 탐색 트리(Balanced BST) 루트 노드로 부터 시작해서 찾고자하는 key 를 각 레벨에 따라 한번의 비교를 통해 key 값을 찾을 수 있다. $O(h)$ (h : 높이) 의 시간 복잡도를 가진다. insert, delete 연산 모두 search의 영향을 받는다. 이진 트리의 높이 $lg(n+1)
2022.11.29
no image
C 정복하기(2) - 메모리 할당
헤더파일로 나 를 포함시켜야한다. 메모리 할당 함수 : malloc 메모리 할당 및 초기화 : calloc 메모리 추가 할당 : realloc 메모리 해제 함수 : free 동적할당: 프로그램 실행 중에 동적으로 메모리를 할당하는 것 동적으로 메모리를 할당할 때는 ‘Heap’영역에 할당한다. 정적 메모리 할당 방법(static) : 데이터를 저장할 때 변수를 선언하고 사용하는 방식 프로그램이 시작하기 전에 사용할 메모리공간을 정해놓고 시작 정적 메모리 할당의 문제점 메모리의 크기에 따라 메모리가 낭비되거나 필요에 따른 메모리 공간이 부족해 프로그램을 다시 짜야하는 경우가 발생 void* malloc(size_t size); malloc이 void* 를 리턴하는 이유 동적으로 메모리를 할당할 때 정수를 저..
2022.11.28
C 정복하기(1) - 포인터
C언어에서의 자료형 크기 구분 자료형 크기 범위 기본형 void – – 문자형 (signed) char 1 byte -128 ~ 127 unsigned char 1 byte 0 ~ 255 wchar_t 2 byte 0 ~ 65,535 정수형 bool 1 byte 0 ~ 1 (signed) short (int) 2 byte -32,768 ~ 32,767 unsigned short (int) 4 byte 0 ~ 65,535 (signed) int 4 byte -2,147,483,648 ~ 2,147,483,647 unsigned int 4 byte 0 ~ 4,294,967,295 (signed) long (int) 4 byte -2,147,483,648 ~ 2,147,483,647 unsigned long ..
2022.11.28