2. PINTOS :: project 2 - System Call
·
CS/Computer System
/* The main system call interface */voidsyscall_handler (struct intr_frame *f UNUSED) { // TODO: Your implementation goes here. uint64_t syscall_no = f->R.rax; // 콜 넘버 // uint64_t a1 = f->R.rdi; // 파일 네임 // uint64_t a2 = f->R.rsi; // v(데이터) // uint64_t a3 = f->R.rdx; // 사이즈 // uint64_t a4 = f->R.r10; // uint64_t a5 = f->R.r8; // uint64_t a6 = f->R.r9; switch (f->R.rax) { // rax is the..
2. PINTOS :: project 2 - User Program
·
CS/Computer System
static boolload (const char *file_name, struct intr_frame *if_) { ... /* Start address. */ if_->rip = ehdr.e_entry; /* TODO: Your code goes here. * TODO: Implement argument passing (see project2/argument_passing.html). */ //1. 첫 주소 부터 글자의 길이(끝에 \0포함) 만큼 넣어준다 // 글자 길이 만큼 저장 위치가 감소 해야 한다. (거꾸로) // argv[0]까지 = RDI: 4 uintptr_t start_p = (if_ -> rsp); //초기 시작 포인터 저장 uintptr_t curr = 0; //계속 갱신 되는 임..
2. PINTOS :: project 1 - Priority Scheduling
·
CS/Computer System
노션 참고
1. PINTOS :: project 1 - alarm
·
CS/Computer System
정글끝까지📢 “여기까지 잘 오셨습니다. OS프로젝트를 시작합니다.”  OS프로젝트는 PintOS의 코드를 직접 수정해가며 진행하는 프로젝트입니다.PintOS는 2004년 스탠포드에서 만들어진 교육용 운영체제예요. 우리 프로젝트는 이를 기반으로 KAIST 권영진 교수님 주도 하에 만들어진 KAIST PintOS로 진행됩니다. 💡 팀 별로 프로젝트 1~3을 완수해갑니다.KAIST PintOS Assignment : https://casys-kaist.github.io/pintos-kaist/내용은 어렵지만, 매우 상세하게 접근 방법을 기술하고 있습니다.PROJECT 1 - Advanced Scheduler와 CondVar는 옵션노션 참고
[C언어] csapp 11장 Homework
·
CS/Computer System
전체 코드 11.6 - c=> GET /favicon.ico HTTP/1.1이 줄에서 HTTP/1.1이 HTTP 버전을 나타낸다. 따라서 나는 HTTP/1.1버전을 사용하는 것을 확인 할 수 있다.11.71. get_filetype에 mp4 타입 추가하기void get_filetype(char *filename, char *filetype){ if (strstr(filename, ".html")) strcpy(filetype, "text/html"); else if (strstr(filename, ".gif")) strcpy(filetype, "image/gif"); else if (strstr(filename, ".png")) strcpy(filetype, "image/png");..
[C언어] tiny 웹 서버 구현하기
·
CS/Computer System
전체 코드https://github.com/ozll-zinni/webproxy/tree/0_make_tiny_server GitHub - ozll-zinni/webproxyContribute to ozll-zinni/webproxy development by creating an account on GitHub.github.com Mainint main(int argc, char **argv)HTTP 웹 서버를 시작하고 클라이언트의 연결을 수신하여 처리한다매개변수argc : 인자 개수argv : 인자 배열메인함수에 전달되는 인수의 개수는 2개이어야 한다argv[0] : 실행 경로,argv[1] : 포트 번호/* $begin tinymain *//* * tiny.c - A simple, iterative ..
5. RBTREE Node 삭제
·
CS/Computer System
1) 삭제할 노드를 대체할 노드 찾기삭제할 키를 가진 노드인 delete를 삭제하면 해당 노드가 삭제되고, 삭제된 자리에 다른 노드가 채워지게 된다.delete를 대체하면서 사라지는 노드를 'remove', 'remove'의 자식이던 노드를 'replace_node'로 정한다.'replace_node'가 'remove'의 자리를 대체하게 된다.삭제할 노드 'delete'의 양쪽 자식 노드가 모두 존재하는 경우remove : 삭제할 노드의 오른쪽 서브트리에서 가장 작은 노드인 후계자(successor) 노드가 제거된다.replace_node : 후계자 노드의 자식 노드가 remove의 기존 자리를 대체한다. (후계자 노드는 항상 왼쪽 자식이 없으므로 오른쪽 자식 노드 하나만 존재한다.)삭제할 노드 'del..
4. RBTREE 탐색, array 변환
·
CS/Computer System
1.  탐색1) key 탐색tree내에 해당 key가 있는지 탐색하여 해당 노드의 포인터를 반환한다.해당하는 node가 없으면 NULL을 반환한다.루트 노드를 시작으로 'current' 포인터를 설정한다.'current'의 key값과 찾으려는 key값을 비교하며 노드를 이동시키면서 key값과 같은 노드를 찾는다.시간 복잡도: 탐색 시 자식 노드의 수가 항상 2개로 제한되기 때문에, 한 단계씩 이동할 때마다 검색 대상 노드의 수가 절반으로 줄어들게 되어 시간 복잡도는 $O(log n)$이 된다.💻 key 탐색 CODE/* 4️⃣ 탐색 1 - key 탐색 */// key에 해당하는 노드를 반환하는 함수node_t *rbtree_find(const rbtree *t, const key_t key){ nod..
3. RBTree key 추가
·
CS/Computer System
key 추가1) 새 노드 생성새 노드를 동적으로 생성한다.노드의 key를 입력받고, color를 RED로, 자식 노드들은 nil 노드로 설정한다.이미 같은 key의 값이 존재해도 하나 더 추가 한다. (multiset)2) 새 노드를 삽입할 위치 탐색루트 노드부터 탐색을 시작하여 탐색 중인 노드보다 key값이 작은 경우 왼쪽 자식으로, 큰 경우 오른쪽 자식으로 이동한다.탐색 중인 노드의 자식 노드가 nil 노드인 경우, 새 노드를 해당 자식 노드로 추가하고, 반복문을 종료한다.반복문 종료 후 새 노드의 부모를 지정한다.💻 새 노드 생성, 위치 탐색 CODE/* 3️⃣ key 추가 */// 노드를 삽입하고 불균형을 복구하는 함수node_t *rbtree_insert(rbtree *t, const key_..
2. RBTREE 트리 생성, 삭제
·
CS/Computer System
1. Tree 생성1) tree 구조체 동적 할당여러 개의 tree를 생성할 수 있어야 하며 각각 다른 내용들을 저장할 수 있어야 한다.트리의 루트 노드(root)와 nil 노드(nil)를 저장할 수 있는 공간을 가지고 있어야 한다.calloc함수를 통해 메모리 동적 할당하고 값을 0으로 초기화한다.📢 트리의 전체적인 상태와 구조를 정의하는 핵심적인 데이터 구조로, 이를 잘 관리하기 위해 메모리를 동적으로 할당하고, 프로그램이 끝나면 메모리를 해제하는 작업이 중요하다. 2) nil 노드 생성 및 초기화RB tree에서 리프 노드는 'nil 노드'로 표시한다.tree가 빈 경우 root는 nil노드어야 한다.'nil 노드'는 일종의 가상 노드로서, 트리에서 실제로 존재하지 않는 노드이다.일반 노드와는 다..
내 꿈은 어느 날 문득 그렇게 이루어졌다.
'CS/Computer System' 카테고리의 글 목록