5기

구현 목표f_name을 통째로 file_name으로 바꿔주고 있다.[[strtok_r]] 를 사용해 토큰별로 쪼개준다 (공백 여러개 있을 때도 처리해야 함)그렇게 쪼개진 토큰을 list에 담아 intr_frame의 register에 세팅해준다.intprocess_exec (void *f_name) { char *file_name = f_name; bool success; /* We cannot use the intr_frame in the thread structure. * This is because when current thread rescheduled, * it stores the execution information to the member. */ struc..
Main goalImplement 4.4 BSD scheduler MLFQ like scheduler without the queues.MLFQS (Multi-level Feedback Queue Scheduling) 와 유사한 스케쥴러를 구현한다.MLFSQS like 일까?❌ Priority의 값에 따라 Ready-Queue 여럿 존재하며, 순위를 기준으로 Ready-Queue를 실행하며, Queue에 여러 쓰레드가 존재할 경우 Round-Robin 으로 큐를 실행한다. (Multi-Level)✅ Priority의 값을 일정 tick 마다 조정한다. (Feedback)여기서, 우리는 여러개의 Ready_Queue를 관리하는 것이 아니라, 한 개의 all_list 로 feedback system을 관리할..
핀토스는 사람을 병들게 한다.전체적인 코드를 보고싶으면 여기 있는 레포지토리에서 확인하시면 됩니다.https://github.com/jun9898/pintos-kaist 🐳 문제정의현재상황Pintos - thread - alarm_clock 까지 구현된 상태에서는 작업의 우선순위가 고려되지 않은 채 쓰레드 스케쥴링을 수행한다. ( thread_unblock, thread_set_priority )여기서 만약 Priority에 따라 Ready_list를 정렬한다고 할지라도, Priority Inversion이 발생할 수 있기 때문에 공유자원에 대한 관리 또한 필요하다. (sema_up, sema_down)Priority Inversion을 해결하기 위한 방법으로는 priority inheritance p..
Network Programming 드디어 통신!클라이언트 서버프로그래밍 모델모든 네트워크 응용 프로그램은 클라이언트 서버 모델에 기초하고 있다.서버는 일부 리소스를 관리하고 이 리소스를 조작해서 클라이언트를 위한 일부 서비스를 제공한다.클라이언트-서버 모델에서 근본적인 연산은 트랜잭션이다.트랜젝션트랜잭션은 네단계로 구성된다.1. 클라이언트가 서비스를 필요로 할 때, 클라이언트는 한 개의 요청을 서버에 보내는것으로 트랜잭션을 개시한다.2. 서버는 요청을 받고, 해석하고, 자신의 자원들을 적절한 방법으로 조작한다.3. 서버는 응답을 클라이언트로 보내고, 그 후에 다음 요청을 기다린다.4. 클라이언트는 응답을 받고 이것을 처리한다.  네트워크네트워크네트워크는 단지 또 다른 I/O 디바이스이다. (네트워크는 ..
System-Level I/OUnix I/O파일은 연속된 m개의 바이트파일을 열때 응용 프로그램은 커널에 I/O 디바이스를 식별할 수 있는 식별자(descriptor) 라고 하는 비음수를 리요청한다.이 식별자는 표준입력(0번) 표준출력(1번) 표준에러(2)로 이루어진 기본 식별자를 가지고 있으며 프로그램의 요청에 의해 식별자가 반환된다.실제 파일의 끝에서 EOF라고 알려진 조건이 발생하면 파일이 종료된다.파일디렉토리는 링크들의 배열로 구성된다.. (점 한개)는 자신의 디렉토리로의 링크이고 ..(점 두개)는 부모 디렉토리로의 링크다.  RIO 패키지를 이용한 안정적인 읽기와 쓰기RIO 패키지짧은 카운트를 자동으로 처리하며 네트워크 프로그램으로 인한 통신에서 자료의 손상이 이뤄지지 않게 안정적으로 효율적인 ..
링커 링킹(linking) 여러개의 코드와 데이터를 모아서 한 개의 파일로 만드는 작업. 로드타임, 실행시에도 수행될 수 있고 독립적인 컴파일을 가능하게 한다. 모듈을 나누고 하나의 모듈만 재 컴파일 하는 방식으로 사용된다. 링커를 이해해야 하는 이유 링커를 이해하면 큰 프로그램을 작성하는데 도움이 된다. 특히 맞지않는 라이브러리 버전때문에 링커 에러가 발생하는 경우는 링커가 참조를 해결해나가는 과정을 이해하고 있어야 해결할 수 있다. 위험한 프로그래밍 에러를 피할 수 있다. 전역변수를 중복해서 정의한 프로그램도 기본 설정의 경우 경고 메시지 없이 링커를 통과할 수 있다. 이런 에러를 예방하려면 링커를 이해해야 함. 링킹을 이해하면 어떻게 언어의 변수 영역 규칙이 구현되는지 이해할 수 있다. 컴파일러 드..
RB_Tree 1. RB_Tree 초기화 rbtree *new_rbtree(void) { rbtree *p = (rbtree *)malloc(sizeof(rbtree)); if (p == NULL) { perror("Failed to allocate memory for RB tree"); exit(EXIT_FAILURE); } // TODO: initialize struct if needed p->nil = (node_t *)malloc(sizeof(rbtree)); if (p->nil == NULL) { perror("Failed to allocate memory for sentinel node"); exit(EXIT_FAILURE); } p->nil->color = RBTREE_BLACK; p->ro..
RB-Tree RB-Tree란? 자가 균형 이진 탐색 트리의 일종으로, 이진탐색 트리를 가지고 있고, 노드의 삽입과 삭제를 할 때 전체 트리의 높이를 균형있게 제한하는 이진 탐색 트리이다. RB-Tree의 특징 RB-Tree의 가장 큰 특징은 각각의 노드가 색깔에 관한 정보를 갖는다는 점과, 규칙을 만족하지 않으면 케이스 별로 노드를 회전시키며 균형을 맞춘다는 점이다. (노드를 승격시키는 B트리와의 차별점) NIL 노드 NIL 노드란, 실제 데이터를 갖는 트리가 아닌, 리프노드 끝에 NULL 대신 NIL 노드를 선언해 해당 트리의 끝을 알린다. (NIL 노드를 사용하면 트리의 끝을 NULL 포인터로 처리하는 대신 트리의 모든 노드를 동일한 방식으로 처리할 수 있다. 이로 인해 코드의 일관성과 가독성이 향..
자료구조 Binary Search Tree 기본 제공 함수 ////////////////////////////////////////////////////////////////////////////////// /* CE1007/CZ1007 Data Structures Lab Test: Section F - Binary Search Trees Questions Purpose: Implementing the required functions for Question 5 Implementing 'remove node' operation for BST*/ ////////////////////////////////////////////////////////////////////////////////// #includ..
자료구조 Stack and Queues 기본 제공 함수 ////////////////////////////////////////////////////////////////////////////////// /* CE1007/CZ1007 Data Structures Lab Test: Section C - Stack and Queue Questions Purpose: Implementing the required functions for Question 1 */ ////////////////////////////////////////////////////////////////////////////////// #include #include ///////////////////////////////////////..
전낙타
'5기' 태그의 글 목록