Project 3. Introduction
Project 3: Virtual Memory 지난 과제의 코드 위에 이번 과제를 빌드해야한다. 프로젝트 3에서도 프로젝트 2의 테스트 프로그램이 동작해야한다. 프로젝트 2의 버그를 고치는 게 좋다. → 그러한 버그들이 프로젝트 3에서도 같은 문제를 일으킬 가능성이 높기 때문이다. Source Files 이번 프로젝트에서는 vm 디렉토리에서 작업하게 될 것이다. Makefile은 -DVM 세팅을 포함하여 설계되어있다. 엄청난 양의 템플릿 코드를 제공한다. 반드시 주어진 템플릿을 따라야한다. “DO NOT CHANGE.” 라고 적혀있는 부분의 코드는 절대 수정하면 안된다. vm ├── Make.vars ├── Makefile ├── anon.c ├── file.c ├── inspect.c ├── targe..
2023.01.19
no image
Project 2. System Calls 구현 (3) - Process 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.05
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
Chapter 11. Network Programming
11.1 The Client-Server Programming Model 서버-클라이언트 모델 서버 프로세스는 한 개 또는 여러 개의 클라이언트 프로세스로 구성된다. 서버 : 리소스 관리, 리소스 조작 → 클라이언트를 위한 서비스 제공 서버-클라이언트의 근본적인 연산은 ‘트랜잭션’이다. 아래와 같은 총 4가지 스텝으로 트랜잭션이 이루어진다. ⚠️ 클라이언트와 서버는 프로세스이며, 머신이나 호스트는 아니다. 11.2 Networks 클라이언트와 서버는 별도의 호스트에서 돌아가며, 컴퓨터 네트워크의 H/W 및 S/W를 사용해서 통신한다. 호스트에게 네트워크는 또 다른 I/O 디바이스 이다. I/O bus의 확장 슬롯에 어댑터가 꽂혀있으며, 네트워크에 물리적인 인터페이스를 제공한다. 네트워크에서 수신한 데이터..
2022.12.20