- [ 크래프톤정글/PintOS ][CS] PintOS - Thread(Alarm Clock and Priority Scheduling) 구현2022-12-24 15:59:16Alarm Clock 💡 요구사항 timer_sleep() , defined in devices/timer.c 현재 작동하는 구현 방식은 busy wating 방식, busy waitng 방식을 개선한다. 기존 Busy Waiting 방식 현재 시간을 확인하고, thread_yield() 함수를 호출하며 일정 시간이 지날 때 까지 while 루프를 돈다. /* Suspends execution for approximately TICKS timer ticks. */ void timer_sleep (int64_t ticks) { int64_t start = timer_ticks (); // 현재 시간 구하기 ASSERT (intr_get_level () == INTR_ON); while (timer_elap..
- [ 컴퓨터 과학/운영체제 ][CS] 공유 자원(Shared Resource)과 임계구역(Critical Section), 세마포어(Semaphore) - 추가예정2022-12-21 11:00:28프로세스는 독립적으로 작업을 할 수도 있고, 공유된 자원을 가지고 공동 작업을 할 수도 있다. 하지만 여러 프로세스가 한정된 자원을 가지고 공동으로 작업할 때 발생할 수 있는 문제와 이를 해결할 수 있는 방법을 알아보고자 한다. 공유 자원의 접근 공유 자원(Shared Resource)은 여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등을 말한다. 공유 자원은 공동으로 이용되기 때문에 누가 언제 데이터를 읽거나 쓰느냐에 따라 그 결과가 달라질 수 있다. **따라서 프로세스들의 공유 자원 접근 순서를 정하여 예상치 못한 문제가 발생하지 않도록 해야 한다.** HTML 삽입 미리보기할 수 없는 소스 임계구역(Critical Section) 공유 자원 접근 순서에 따라 실행 결과가 달라지는 프로그램의..
- [ 컴퓨터 과학/운영체제 ][CS] CGI(Common Gateway Interface), 웹 컨텐츠의 이해(정적, 동적)2022-12-11 22:49:49CGI(Common Gateway Interface)란? CGI란 공통 게이트웨이 인터페이스(Common Gateway Interface)의 약어로, 웹 서버와 외부 프로그램 사이에서 정보를 주고받는 방법이나 규약들을 말한다. 웹 서버와 응용프로그램이 상호 작용하여 동적 컨텐츠를 제공해주고, 웹 서버와 수많은 언어들로 만든 프로그램이 상호 작용하기 위한 표준화 된 약속이 필요한데, 바로 그 약속이 CGI(Common Gateway Interface) 기술이다. CGI의 기능 웹 서버 프로그램의 핵심 기능은 미리 준비된 정보를 클라이언트의 요구에 응답하는 것이다. 즉, 초기의 웹 서버는 이미 준비된 자료인 '정적 컨텐츠'의 정보만 제공해 줄 수 있었다. 사용자로부터 입력을 받아 정보를 동적으로 생성하고 클..
- [ 컴퓨터 과학/운영체제 ][CS] 커널(Kernel) & 시스템 콜(System Call) & 인터럽트(Interrupt)2022-12-04 00:27:07커널(Kernel)과 인터페이스(Interface) 커널(Kernel) 커널(Kernel)은 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심적인 기능을 모아놓은 것으로, 자동차에 비유하자면 엔진에 해당된다. 자동차는 종류가 다양하지만 성능은 엔진이 좌우하는데, 이와 마찬가지로 운영체제의 성능은 커널이 좌우한다. 커널이 존재하는 이유는 시스템을 보호하기 위해 존재한다. 만약 커널이 없다면 우리가 작성한 프로그램이 함부로 하드웨어 자원을 다 점유해서 사용하고, 그래서 다른 프로세스가 영향을 받게되고, 그러다보면 전체 시스템이 붕괴될 수 있는 여러 가지 위험한 부분들을 방지하기 위해 시스템에 전반된 부분이나 하드웨어에 관련된 부분은 커널이 관리하게 된다. 따라서 우리가 작성한 프로그램은 커..
- [ 크래프톤정글/CS:APP ][CS] 동적 메모리 할당(Dynamic Memory Allocation), 프로세스 메모리 구조, 메모리 누수(Memory Leak)2022-12-01 20:50:08동적 메모리 할당(Dynamic Memory Allocation)이란? 동적 메모리 할당(DYNAMIC MEMORY ALLOCATION) 은 컴퓨터 프로그래밍에서 실행 시간 동안 사용할 메모리 공간을 할당하는 것을 말한다. 즉, 프로그램이 실행되는 동안(runtime) 입력되는 데이터에 맞게 기억 공간을 확보하는 것을 동적 메모리 할당이라고 한다. 이는 프로그램이 실행하는 순간 프로그램이 사용할 메모리 크기를 고려하여 메모리의 할당이 이루어지는 정적 메모리 할당과 대조적이다. 그럼 정적 메모리 할당은 무엇일까? 정적 메모리 할당(STATIC MEMORY ALLOCATION)은 프로그램을 컴파일하는 단계에서 필요한 기억 공간의 크기를 결정하는 것이다. 즉, 프로그램을 작성한 이후 컴파일러는 "이 프로그램이..
- [ 크래프톤정글/C 언어 ][C] 이진 탐색 트리(Binary Search Tree, BST) 개념 및 구현2022-11-28 21:38:06이진 탐색 트리(Binary Search Tree, BST) 원소를 특정한 조건에 따라 정렬해 놓은 이진트리를 말한다. 이진 탐색 트리는 탐색을 위해 정렬을 해놓은 트리이다. 이진 탐색 트리는 검색 수행 연산은 O(logN) 이다. 이진 탐색 트리의 속성 모든 원소는 유일한 키 값을 갖는다. 즉, 중복된 내용을 가지는 항목은 없다. 왼쪽 서브트리의 모든 원소들은 루트의 키보다 작은 값을 갖는다. 오른쪽 서브트리의 모든 원소들은 루트의 키보다 큰 값을 갖는다. 왼쪽 서브트리와 오른쪽 서브트리도 이진탐색트리이다. 즉, 일반 트리나 이진트리하고 똑같이 이진탐색트리도 재귀적인 정의를 한다.(서브트리에서 볼 때나 루트노드에서 볼 때나 위의 조건은 모두 성립되므로) 트리 안에서 어떤 노드를 루트로 잡던지 위 조건은..