분류 전체보기100 [CS] Kaist PintOS User Programs, System Call #5 이 문서는 카이스트 핀토스 원유집 교수님의 강의를 참고하여 작성하였습니다 Pintos Project2 systemcal User program에서 write를 호출하면 syscall.c에 있는 write함수를 호출한다. write함수는 syscall3 함수를 호출한다. syscall3함수는 3개의 인자를 받아 User Stack에 쌓고 Interrupt Vector Table의 syscall_handler를 호출한다. 프로젝트에서 구현할 부분은 syscall_handler의 내용이다. 여기 채워져야할 systemcall의 'number'는 syscall_nr.h에 정의되어있다. System call handler 구현 목표 1. system call handler가 system call number를 사.. 2022. 12. 27. [C 기초 문법] 이중 포인터 이 포스팅은 한국기술교육대학교 김덕수 교수님의 'C언어 Lv2' 강의를 바탕으로 작성됐습니다. 두 배열을 교환 (Swap) 하려면? 방법 1 : 각 원소에 대해 swap 연산 수행 👉 비효율적 방법 2 : 이름만 바꿔줄 수는 없을까? 🤔 #1 이중 포인터 포인터는 변수 모든 변수(포인터)는 그 변수를 가리키는 포인터를 가질 수 있다. 즉, 포인터를 가리키는 포인터를 생성할 수 있다. int a = 10; int* p = &a; int** dP = &p; a = 10 *p = 10 **dP = 10 (이중 참조) 이전에 원본값을 바꾸기 위해서 주소값을 함수의 인자로 사용했다. 이처럼 포인터를 바꾸기 위해서 포인터의 주소값을 함수의 인자로 사용하고, 이를 이중 포인터가 매개변수로 사용된다. 방법 2 : 포인.. 2022. 12. 26. [C 기초 문법] 포인터와 배열 이 포스팅은 한국기술교육대학교 김덕수 교수님의 'C언어 Lv2' 강의를 바탕으로 작성됐습니다. 배열 이름은 연속된 메모리 공간의 시작 주소 배열의 이름 전달 👉 메모리 주소 전달 - 배열을 전달 한 것과 같은 효과 (call-by-reference) - 배열의 원소 접근가능 #1 포인터의 산술 연산 (Pointer Arithmetic) 사용 가능 산술 연산 : +, -, ++, -- 포인터가 가리키는 대상의 data type의 크기(bytes)만큼 증/감 주의사항 *(p+1) vs (*p+1) : 포인터 산술 연산 vs 포인터 간접 참조한 값 연산 *++p vs ++*p : 포인터 산술 연산 vs 포인터 간접 참조한 값 연산 *(asterisk)의 위치에 따라 결괏값이 달라질 수 있다. #2 포인터로 다.. 2022. 12. 26. [C 기초 문법] 포인터 주의사항 이 포스팅은 한국기술교육대학교 김덕수 교수님의 'C언어 Lv2' 강의를 바탕으로 작성됐습니다. #1 원본 값을 보호 - "const" 함수에서 포인터를 매개인자로 받을 때 원본 값을 보호하기 위해서는 'const'를 사용한다. 그렇게 되면 함수 내에서 상수 취급을 한다. const의 위치에 따라 상수 취급하는 대상이 달라진다. 1. const int *ptr : 간접 참조된 위치의 값을 상수 취급한다. *ptr = 100; // error prt = &b; // okay 2. int* const ptr : 포인터 변수를 상수 취급한다. *ptr = 100; // okay ptr = &b; // error #2 Local variable 주소 반환 ? 함수 내 지역 변수의 주소를 반환하면, 함수가 종료되는.. 2022. 12. 25. [C 기초 문법] 포인터? 이 포스팅은 한국기술교육대학교 김덕수 교수님의 'C언어 Lv2' 강의를 바탕으로 작성됐습니다. 포인터에 대한 이해가 부족하여 포스팅을 작성하게 됐습니다. 제 이해를 위해 작성하는 포스팅이라, 최대한 구어체로 작성될 수 있으며 도움이 안 될 수 있습니다. &(Ampersand) : "변수의 주소" (시작 주소) 메모리 주소의 길이 = Address bus의 크기 (word) 배열의 이름 = 배열 시작 주소 " Call by reference는 원본이 전달되는 것과 유사하다." 그렇다면 다음 두 가지 궁금점이 생긴다. 1. 메모리 주소를 전달받을 매개변수는 무엇인가? 2. 해당 주소의 값을 변경하려면 어떻게 해야하는가? #1 포인터 ( Pointer or Pointer Variable) 1. 주소를 저장하는.. 2022. 12. 25. [CS] Kaist PintOS User Programs, Passing the arguments #4 이 문서는 카이스트 핀토스 원유집 교수님의 강의를 참고하여 작성하였습니다. 이 문서는 카이스트 핀토스 프로젝트 가이드라인을 정리한 글입니다. Part 2 : User Program 현재 핀토스는 명령어 전체 한 줄을 통째로 읽는다. 'echo x y z' thread name : 'echo x y z' find program with file name : 'echo x y z' arguments : 'echo', 'x', 'y', and 'z' are not passed 각각의 인자가 구분되도록 수정해야한다. thread name : 'echo' find program with file name : 'echo' pushl the arguments(x, y, z) to user stack. 수정해야 하는 .. 2022. 12. 23. [CS] Kaist PintOS User Programs, 프로그램 구조 설명 #3 이 문서는 카이스트 핀토스 원유집 교수님의 강의를 참고하여 작성하였습니다. 이 문서는 카이스트 핀토스 프로젝트 가이드라인을 정리한 글입니다. Part 2 : User Program 1. 핀토스(다른 운영체제가 그러하듯)는 프로세스 실행을 위해 인수를 얻고 함수를 호출한다. run_task(char ** argv) 함수는 process_excute(argv)를 호출한다 2. 프로세스가 실행되면 어떠한 기능을 가진 스레드를 생성한다. process_excute(const char *file_name) 함수는 thread_create(.. start_process...)를 호출한다. 3. 여기서 주목할 점은 처음 호출되는 run_task(char **argv)에서 프로세스 실행 함수를 인자로 받는 proces.. 2022. 12. 23. [CS] Kaist PintOS THREAD, Priority Scheduling #2 이 문서는 카이스트 핀토스 원유집 교수님의 강의를 참고하여 작성하였습니다. 이 문서는 카이스트 핀토스 프로젝트 가이드라인을 정리한 글입니다. Part 1 : Threads 다음 세 가지를 구현한다. 1. Alarm clock 2. Priority scheduling 3. Advanced scheduler #2 Priority scheduling 이번 과제에서는 다음 3가지는 구현해야 한다. 1. 스레드 우선순위에 다른 ready_list 정렬 2. 동기화 요소에 따른 wait_list 정렬(semaphore, condition variable) 3. preemption 구현 PintOS의 우선순위 수준은 0(PRI_MIN)에서 63(PRI_MAX)으로 64 계층으로 이루어져 있다. 숫자가 높을수록 우선순.. 2022. 12. 19. [CS] Kaist PintOS THREAD, Alarm clock #1 이 문서는 카이스트 핀토스 원유집 교수님의 강의를 참고하여 작성하였습니다. 이 문서는 카이스트 핀토스 프로젝트 가이드라인을 정리한 글입니다. Part 1 : Threads 다음 세 가지를 구현한다. 1. Alarm clock 2. Priority scheduling 3. Advanced scheduler #1 Alarm clock timer_sleep void timer_sleep (int64_t ticks) { int64_t start = timer_ticks (); while (timer_elapsed (start) < ticks) thread_yield (); } start변수에 현재 시간을 저장한다. timer_elapsed(time) : 들어온 인자로부터 얼마의 시간이 지났는지 반환한다. 이후 .. 2022. 12. 17. 이전 1 2 3 4 5 6 7 8 ··· 12 다음