일단 해보자
github: @syk25
1. 과제 소개Alarm clock은 프로세스나 스레드를 재우거나 깨우는 역할을 합니다. 일정 시간 동안 스레드를 일시 정지 시킨 후에 프로세스, 스레드를 다시 깨워 실행을 재개합니다.스레드를 재우고 깨우는 데에 timer-interrupt를 사용합니다.PintOS는 현재 busy-waiting 방식으로 alarm clock을 구현하고 있습니다.2. 목표이번 과제는 busy-waiting 방식으로 구현 된 alarm clock을 sleep awake 방식으로 바꾸는 것이 목표입니다.busy waiting 방식은 cpu 에게는 그다지 효율적인 방법이 아닙니다. busy-waiting방식에서 스레드는 ready state와 running state를 반복해서 왔다갔다하기 때문입니다.sleep/awake 방..
소감1주일 간 Red Black Tree를 처음부터 끝까지 C로 구현해야했다. CLRS책을 참고하면서 모든 함수들을 구현했지만 테스트케이스에서 계속 실패가 떴다. 디버깅과정이 꽤 까다로웠다.Case1. 틀린 그림 찾기디버깅을 하면서 마주쳤던 버그 중에 하나는 틀린 그림 찾기다.위의 함수는 맞는 코드고 아래함수는 틀린코드다. 맞는 함수를 토대로 틀린 함수를 구현했다.확인 결과, 변수 초기화를 놓쳤다.결론! 디버깅 툴을 잘 쓰자!
이중포인터를 쓰는 이유 이중포인터는 포인터의 메모리 주소를 저장하는 변수다. 포인터가 변수의 메모리 주소를 저장한다는 점에서 차이가 있다. 이중 포인터 그 자체는 의미가 없다. 하지만 이중포인터와 함수를 함께 쓴다면 그 의미가 살아난다. 이중포인터와 함수의 선언 #include #include ////////////////////////////////////////////////////////////////////////////////// typedef struct _listnode { int item; struct _listnode *next; } ListNode; // You should not change the definition of ListNode typedef struct _linkedlis..
메모리 해제 free(cur); 메모리 해제란 포인터가 가리키는 메모리를 놓아주는 것이다. 포인터는 특정 메모리 주소를 가리킨다. 메모리를 놓아주게 되면 해당 메모리는 프로그램의 입장에서는 사용할 권한이 없어진다. 즉, 다른 프로그램이 해당 메모리를 이제 사용할 수 있다. dangling pointer 메모리를 해제하고 포인터를 별도로 처리하지 않으면 해당 포인터는 여전히 해제 된 메모리 주소를 가리키게 된다. 다른 프로그램이 해당 메모리를 건드리고 본래의 프로그램이 포인터로 그 메모리에 접근하게 되면 심각한 문제가 발생할 수 있다. 해제 된 메모리 주소를 가리키는 포인터를 dangling 포인터라고 하는데 NULL pointer로 만들거나 다른 메모리주소를 가리키게 해야한다. 함수 내에서 메모리 해제 ..
홍C: 섹션 1.1 ~ 1.5 C 언어는 시스템 프로그래밍을 효율적으로 하기 위해 만들어진 언어다, 특히 UNIX 운영체제의 개발에 C 가 많이 쓰였다. C는 프로그래밍 효율성이 좋다. 강력하고 유연하며 프로그래머 중심이어서 개발자에게 주어진 권한이 막강하다. 다른 시스템에 이식하기에도 용이하다. 다만 개발자에게 책임도 커지게 된다. C는 운영체제, 게임, VFX, 임베디드, 공장 자동화 등 개발의 모든 분야에 쓰인다. 즉, 컴퓨터가 있으면 C, C++는 무조건 쓰인다. C 언어는 다른 프로그래밍 언어와 마찬가지로 사람의 필요에 따라 발전해왔다. 벨 연구소에서 만들어진 고전 C부터 현대의 C까지 변화해왔다. 소프트웨어는 총 7단계의 개발을 거쳐온다. ① 소프트웨어 목적 정의 ② 프로그램 설계 ③ 코드 작..
오늘 한 일 분할 정복 개념 정리 분할정복은 동적계획법과 함께 문제를 해결하는 알고리즘 패러다임 중에 하나다. 문제가 최적부분구조이고 큰 문제를 작은 문제로 쪼갤 때 그 해결책들을 쌓아서 큰 문제를 해결할 수 있을 경우 분할정복 알고리즘을 사용할 수 있다. 분할 정복 알고리즘을 사용할 경우, 해답 간의 재귀형태를 찾아야한다. 병합정렬, 이진탐색의 경우 분할정복 알고리즘을 해결할 수 있다. 동적계획법 정리 다이나믹 프로그래밍 동적계획법은 분할 정복 알고리즘과 함께 문제를 해결하는 알고리즘 패러다임 중에 하나다. 문제가 최적부분구조이고 큰 문제에서 하위문제 해결책이 중복해서 호출이 될 경우에는 동적계획법을 사용하는 것이 효율적이다. 동적계획법은 하위 문제의 연산 결과를 별도로 저장한 후 큰 문제에서 작은 문..