no image
Project 2. System Calls 구현 (2) - File related
과제 관련 설명 [Krafton Jungle | TIL_22.12.27] Project 2. System Calls 구현 (1) - 개요 1. [Git book] User Memory 시스템 콜을 구현하기 위해서는 가상 주소 공간에 데이터를 읽고 쓰는 방법을 제공해야한다. 인수를 가져올 때는 이러한 기능이 필요하지 않다. 그러나 시스템 콜의 인수로 olive-su.tistory.com Process related: halt, exit, exec, wait, fork File related: create, remove, open, filesize, read, write, seek, tell, close 🎯 Goal Modified files threads/thread.h threads/thread.c us..
2023.01.02
no image
Project 2. System Calls 구현 (1) - 개요
1. [Git book] User Memory 시스템 콜을 구현하기 위해서는 가상 주소 공간에 데이터를 읽고 쓰는 방법을 제공해야한다. 인수를 가져올 때는 이러한 기능이 필요하지 않다. 그러나 시스템 콜의 인수로 제공된 포인터에서 데이터를 읽을 때는 해당 기능을 통해 구현되어야한다. 유효하지 않은 포인터 커널 메모리에 대한 포인터 부분적으로 해당 영역 중 하나에 블록 제공 2. [Git book] System Calls 수정 파일 : userprog/syscall.c 시스템 콜 번호, 시스템 콜 인수를 적절히 사용해서 작업을 수행해야 한다. System Call Details 프로젝트 1 : 외부 인터럽트를 이미 구현했다. Timers, I/O devices 프로젝트 2에서는 프로그램 코드에서 발생하는 ..
2023.01.02
no image
Project 1. Priority Scheduling 구현 (2)
➡️ 과제 설명(Gitbook) Priority Scheduling [Krafton Jungle | TIL_22.12.20] Project 1. Priority Scheduling 구현 (1) ➡️ 과제 설명(Gitbook) Priority Scheduling 🎯 Goal - 우선 순위 스케줄링과 우선 순위 기부를 구현하라 - 'threads/thread.c' 에서 'thread_set_priority' 와 'thread_get_priority' 를 구현하라 현재 실행 중인 스레드보 olive-su.tistory.com ➡️ 구현 [Section 2] Semaphore 📌 코드부분은 한글 주석을 달아놓은 부분이 추가된 부분입니다! 🎯 Goal Functions to modify sema_down() : ..
2022.12.28
no image
Project 1. Priority Scheduling 구현 (1)
➡️ 과제 설명(Gitbook) Priority Scheduling 🎯 Goal - 우선 순위 스케줄링과 우선 순위 기부를 구현하라 - 'threads/thread.c' 에서 'thread_set_priority' 와 'thread_get_priority' 를 구현하라 현재 실행 중인 스레드보다 우선 순위가 높은 스레드가 레디 리스트에 추가되면 현재 스레드는 즉시 프로세서를 새 스레드에게 양보해야한다. 스레드가 락, 세마포, 상황 변수를 기다리고 있을 때 우선 순위가 가장 높은 대기 스레드가 먼저 깨어나야한다. 스레드는 언제든지 자신의 우선 순위를 높이거나 낮출 수 있지만 해당 스레드가 더 이상 가장 높은 우선 순위를 가진 스레드가 아니라면 바로 CPU를 양보해야한다. 스레드 우선 순위의 범위 : PRI..
2022.12.26
no image
Project 1. Alarm Clock 구현
➡️ 과제 설명(Gitbook) Alarm Clock 🎯 Goal - 'devices/timer.c' 에 정의된 'timer_sleep()' 을 재구현하라. - busy wait(현재 방식)를 피하는 방식으로 다시 구현하라 이미 작동되는 구현 형태가 존재하지만 해당 형태는 busy waits 이다. 많은 시간이 흐른 뒤에야 현재 시간을 체킹하고 thread_yield() 를 호출한다. void timer_sleep(int64_t ticks); 최소 x 시간 타이머 tick만큼 진행될 때까지 스레드 호출을 중단한다. 시스템이 유휴상태가 아닌 한 스레드는 정확히 x 타이머 tick 후에 깨어날 필요가 없다. 적절한 시간 동안 대기한 후, 레디 큐에 넣으면 된다. timer_sleep 은 실시간으로 작동하는 ..
2022.12.24
no image
PintOS 시작하기 + Project 1 개요
우선 PintOS 는 2004년 스탠포드 대학에서 만들어진 교육용 운영체제라고 한다. 해당 과정은 KAIST 에서 진행하는 KAIST PintOS 과정으로 진행된다. https://casys-kaist.github.io/pintos-kaist/ 처음에는 너무 방대한 양의 이론들과 자료들이 넘쳐나서.. 뭐부터 공부해야할지 갈피가 안잡혔는데 우선 코치님들이 PintOS 바이블이라고 설명해주신 Gitbook -> KAIST 강의 -> 한양대 강의 자료를 보고 프로젝트 진행의 갈피를 잡을 수 있었다. 1. PintOS 에서의 GDB 사용법 -g 옵션을 사용해서 컴파일 해야한다. 적절한 정보를 포함한 컴파일이 가능하다. GDB 실행 gdb [file] gdb로 인자 넘기기 (gdb) set args argumen..
2022.12.23
no image
Team Session - File Descriptor(FD)
파일 디스크립터(FD, File Descriptor) 네트워크 소켓과 같은 파일이나 기타 입/출력 리소스에 액세스하는 데 사용되는 추상표현 ‘0이 아닌 정수’ (’Non-negative Integer’) : 음수가 아닌 0과 양수인 정수 값 음수는 오류 조건을 나타내기 위해 예약된다. 시스템으로부터 할당받은 파일이나 소켓을 대표하는 정수 POSIX API 정수 값 이름 0 표준 입력(stdin) 1 표준 출력(stdout) 2 표준 에러(stderr) 위의 3가지 디스크립터는 프로그램이 프로세스로 메모리에서 실행을 시작할 때 언제나 열린 채로 동작한다. ⚠️ 프로그램에서 파일 디스크립터를 참조할 때는 번호를 쓸 수도 있지만 가능하면 ‘UNISTD.h’ 에 POSIX 이름을 쓰는 편이 좋다. 1. [fil..
2022.12.11
no image
Malloc Lab 구현
☁️ Overview- 연관 포스팅(동적 메모리 할당 개요) Ch9. Dynamic Memory Allocation(9.9)추가적인 가상메모리를 런타임에 획득할 필요가 있을 때 동적 메모리 할당을 사용한다. 편리성, 호환성 Intro. 동적 메모리 할당 malloc, garbage collector 힙(heap)을 관리한다. 프로세스의 가상메모리olive-su.tistory.com  📂 File structuremalloc-lab ├── Makefile # 테스트를 실행하는 makefile ├── README.md ├── clock.c ├── clock.h ├── config.h ├── fcyc.c ├── fcyc.h ├── fsecs.c ├── fsec..
2022.12.08
no image
Team Session - Data Segment
Segment 메모리 보호를 수행하는 일반적인 방법 가운데 하나 💡 페이징 : 프로세스를 물리적인 단위로 분할하여 메모리에 적재 세그먼트 방식은 논리주소를 물리주소로 매핑하는 방식으로 구현한다. 세그먼트는 논리적인 단위로 메모리를 로드하기 때문에 메모리 보호가 쉽다. 각 세그먼트들의 크기는 균일하지 않다. 컴파일러에 의해 자동적으로 프로그램이 로드될 때 세그먼트가 나뉘게 된다. 간단히 말해서 메모리에 적재될 때 나뉘는 영역! Memory Structure 주소 영역 내용 메모리 할당 시기 0x0000 (Low Address) code(text) * 코드, 함수, 제어문 등 실행할 프로그램의 코드가 저장되는 영역 * Compile Time Memory 할당 * 크기 고정 data data * 초기값이 있는..
2022.12.08