일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- TiL
- 스택
- 알고리즘
- 핀토스
- 코드트리
- 티스토리챌린지
- pintos
- 자바
- 소켓
- 크래프톤정글
- corou
- HTML
- 리액트
- 백준
- 사이드프로젝트
- Java
- Flutter
- 4기
- 모션비트
- 시스템콜
- Vue.js
- JavaScript
- 크래프톤 정글
- 자바스크립트
- 오블완
- 큐
- defee
- CSS
- 나만무
- userprog
- Today
- Total
목록코딩 (367)
미새문지
실행 흐름 우리가 개발하는 프로그램은 일반적으로 유저 모드에서 실행된다. 프로그램 실행 중에 인터럽트(interrupt)가 발생하거나 시스템 콜(system call)을 호출하게 되면 커널 모드로 전환된다. 전환된 커널 모드에선 프로그램의 현재 cpu상태를 저장하고, 인터럽트나 시스템 콜을 직접 처리하게 된다. 그리고 처리가 완료되면 중단됐던 프로그램의 cpu 상태를 복원하고 다시 유저 모드로 전환되며 프로그램이 이어서 실행된다. 커널(kernel) 운영체제의 핵심이며, 이를 규정짓는 매우 중요한 소프트웨어. 시스템의 전반을 관리/감독하는 역할이다. 하드웨어의 자원을 자원이 필요한 프로세스에 나눠주고, 프로세스 제어, 메모리 제어, 시스템 콜 등을 수행하는 부분으로 운영체제의 가장 아래 계층에서 돌아간다..
다 완성 못하고 발표하기엔 너무 아쉬워서 밤새면서 버텼다. 팀원 한 분은 삽입, 회전, minmax를 하셨고 한 분은 전체적인 rb트리 틀과 배열을 맡았다. 본인은 탐색과 삭제에 연관되있는 함수들을 구현했다. rb트리 생성 // 트리 생성 rbtree *new_rbtree(void) { rbtree *p = (rbtree *)calloc(1, sizeof(rbtree)); if (!p) { // 메모리 할당 실패 처리 return NULL; } // 센티넬(가드) 노드를 생성하고 검은색으로 설정 p->nil = (node_t *)calloc(1, sizeof(node_t)); if (!p->nil) { // 메모리 할당 실패 처리 free(p); // 이미 할당된 p 메모리 해제 return NULL; ..
c언어 학습에 시간을 많이 쏟아서 rb트리 구현을 늦게 시작했다. 팀원들하고 다같이 밤을 새서 테스트 성공하고 구현 완성 코드는 추후에 정리해서 올리기로 계획 중 학습 시간 : 10 ~ 27시
프로세스(Process) 운영체제에서 실행 중인 프로그램의 인스턴스 프로세스는 각각 독립된 메모리 영역을 가지고 있고, 다른 프로세스와 격리되어 있다. 이 메모리 공간은 일반적으로 코드 섹션, 데이터 섹션, 스택 섹션 세 가지로 구분되어 있으며 힙 영역이라는 동적 메모리 할당 영역도 존재한다. 코드 섹션 프로세스가 실행할 프로그램 코드를 저장한다. 이 영역은 읽기 전용이며, 프로세스가 실행되는 동안 변경되지 않는다. 데이터 섹션 프로세스의 전역 변수와 정적 변수를 저장한다. 이 영역은 프로세스가 실행되는 동안 값이 변경될 수 있다 스택 섹션 함수 호출과 관련된 정보(지역변수, 반환주소 등)를 저장한다. 함수 호출이 발생할 때마다 스택 프레임이 생성되고, 함수 호출이 완료되면 스택 프레임이 제거된다. 각 ..
배열과 포인터의 관계 배열: 배열은 여러 개의 데이터를 연속적인 공간에 저장하는 자료구조이다. 예를 들어, 5개의 정수를 저장하는 배열은 메모리에서 연속된 5칸을 차지한다. 배열은 인덱스를 사용하여 특정 위치의 값을 읽거나 쓸 수 있습니다. 포인터: 포인터는 주소값을 가지는 변수이다. 자신이 데이터를 저장할 공간을 가지지 않고, 데이터가 저장된 주소를 가리킨다. 포인터는 변수이므로 값을 변경할 수 있다. 배열과 포인터의 관계 배열의 이름은 배열의 첫 번째 요소를 가리키는 포인터로 간주될 수 있어 포인터처럼 동작한다. 따라서 배열의 이름은 사실상 포인터이다. 하지만 배열의 이름은 포인터와 달리 재 할당이 불가능한데, 배열의 이름은 그 자체로 주소이며, 변경할 수 없는 상수이다. 배열의 이름과 포인터 변수의..
레드-블랙 트리(Red-Black Tree) 자가 균형 이진 탐색 트리(Self Balance Binary Search Tree) RB트리를 만족하기 위한 조건 모든 노드는 빨간색 혹은 검은색이다. 루트 노드는 검은색이다. 모든 리프 노드(NIL)들은 검은색이다. (NIL : null leaf, 자료를 갖지 않고 트리의 끝을 나타내는 노드) 빨간색 노드의 자식은 검은색이다. 빨간색 노드가 연속으로 나올 수 없다. 모든 리프 노드에서 Black Depth는 같다 리프 노드에서 루트 노드까지 가는 경로에서 만나는 검은색 노드의 개수가 같다. 조건 5번 속성을 만족해야 성립하는 개념 노드 x의 black height 노드 x에서 임의의 자손 nil 노드까지 내려가는 경로에서의 black 수(자기 자신은 카운트..
동적 메모리 할당 실행 중(런타임)에 사용할 메모리 공간을 할당하는 것을 의미한다. 정적 할당(static allocation) 프로그램이 실행되기 위해서는 메모리가 필요한데 컴파일러는 컴파일 시점에 소스 코드를 읽고 변수 타입들의 크기에 따라 메모리를 할당한다. 동적 할당(dynamic allocation) 컴파일 타임이 아닌 프로그램 런타임에 필요한 만큼의 메모리 공간을 확보하는 것을 의미한다. 동적 할당이 필요한 이유 사용할 때마다 필요한 만큼만 메모리 공간을 확보하고 다 사용했다면, free시켜줌으로써 메모리 공간을 해제해 한정된 메모리 공간을 효율적으로 사용할 수 있게 된다. 함수가 종료되거나 변수의 영역을 벗어나면 자동으로 메모리가 해제되는 정적 할당은 스택에 저장된다. 하지만 동적 할당은 힙..
c언어에서는 두 종류의 소스 코드 파일이 있다 c파일(.c) 실제 프로그램을 돌게 하는 로직 코드 파일 내용 : 함수, 매크로, 변수 등 헤더 파일(.h) 여러 소스 코드 파일에 공통적으로 필요한 것들을 저장하는 파일 내용 : 함수 선언, 매크로, extern 변수 선언 등 #include로 헤더 파일을 작성 헤더 파일의 필요성 함수가 선언된 헤더 파일을 작성하면 여러 파일과 공유가 가능하다. 수정할 때 관련 파일이 많으면 모두 고치기 불편하기 때문에 유지 보수에 어려움이 생긴다. 포인터 데이터가 저장된 메모리의 주소 값을 저장하는 변수이며, 포인터 변수라고도 부른다. 메모리의 주소가 어디인지를 저장하는 전용 변수 특징 포인터를 통해 프로그램의 변수에 접근하여 읽고 쓰거나, 함수를 실행할 수 있다. 자료..