프로젝트/운영체제 만들기
-
[xv6] entry프로젝트/운영체제 만들기 2023. 8. 1. 20:08
글의 참고 - https://github.com/jserv/xv6-x86_64/tree/64bit 글의 전제 - 밑줄로 작성된 글은 강조 표시를 의미한다. - 그림 출처는 항시 그림 아래에 표시했다. 글의 내용 : `mboot_entry`는 `xv6` 64비트 모드에 진입 시, 가장 먼저 시작되는 엔트리 포인트다. `mboot_entry`에 진입하면 제일 먼저하는 작업은 64비트 페이징 작업을 진행한다. 아래의 내용을 이해하기 위해서는 `페이징`과 `Higher Half Kernel`에 대한 내용을 알고 있어야 한다. : `mboot_entry`의 처음 시작은 물리 주소 0x1000 ~ 0x6000까지 0으로 초기화한다. // entry64.S ... mboot_entry: # zero 4 pages f..
-
[xv6] mkfs프로젝트/운영체제 만들기 2023. 7. 30. 02:24
글의 참고 - https://github.com/mit-pdos/xv6-public/tree/master - xv6 - DRAFT as of September 4, 2018 글의 전제 - 밑줄로 작성된 글은 강조 표시를 의미한다. - 그림 출처는 항시 그림 아래에 표시했다. 글의 내용 : `xv6`를 실행시키기 위해서는 `xv6.img` 부팅 디스크 파일과 `fs.img` 파일 시스템 파일이 필요하다. 왜 2개를 별도로 나눠났을까? 무조건적으로 부팅 디스크 파일과 파일 시스템 파일을 나눌 필요는 없다. 하나의 이미지로 합쳐도 상관없다. : 근데, 정말로 `xv6` 에서 파일을 나눠놓은 이유가 뭘까? 내 개인적으로 생각으로 추측해보면, 부팅하는데 포맷이 있는 디스크들은 읽는데 불편함을 가져다 준다. 파일 ..
-
[xv6] Boot-loader프로젝트/운영체제 만들기 2023. 7. 29. 05:39
글의 참고 - https://github.com/mit-pdos/xv6-public/tree/master - xv6 - DRAFT as of September 4, 2018 글의 전제 - 밑줄로 작성된 글은 강조 표시를 의미한다. - 그림 출처는 항시 그림 아래에 표시했다. 글의 내용 - `xv6`의 부트 로더는 `bootasm.s`와 `bootmain.c` 파일로 구성되어 있다. 이 내용은 `xv6` 문서에서 확인이 가능하다. .... The xv6 boot loader comprises two source files, one written in a combination of 16-bit and 32-bit x86 assembly (`bootasm.S`; (9100)) and one written in..
-
[xv6] - fork프로젝트/운영체제 만들기 2023. 7. 27. 19:38
글의 참고 - https://github.com/mit-pdos/xv6-public/tree/eeb7b415dbcb12cc362d0783e41c3d1f44066b17 글의 전제 - 밑줄로 작성된 글은 강조 표시를 의미한다. - 그림 출처는 항시 그림 아래에 표시했다. 글의 내용 : 유저 레벨의 모든 시스템 콜의 정의는 `usys.S` 파일에 정의되어 있다. #include "syscall.h" #include "traps.h" #define SYSCALL(name) \ .globl name; \ name: \ movl $SYS_ ## name, %eax; \ int $T_SYSCALL; \ ret SYSCALL(fork) SYSCALL(exit) SYSCALL(wait) SYSCALL(pipe) SYSC..
-
[xv6] - sbrk프로젝트/운영체제 만들기 2023. 7. 26. 18:05
글의 참고 - https://github.com/mit-pdos/xv6-public/tree/master - xv6 - DRAFT as of September 4, 2018 글의 전제 - 밑줄로 작성된 글은 강조 표시를 의미한다. - 그림 출처는 항시 그림 아래에 표시했다. - 페이징 관련 글이 있기 때문에, 이 글을 먼저 일고 오자. 글의 내용 : 위키피디아에서 정의되는 `brk` 및 `sbrk` 함수는 다음과 같다. 요약하면, `brk` 및 `sbrk` 함수를 호출한 프로세스에게 할당된 메모리를 사이즈를 늘려주는 함수다.`program break`라는 용어의 의미는 사이즈를 의미한다. 대개는 할당받는 주소의 시작 주소를 많이 사용하는데, 초기 유닉스 계열에서 사용되던 `brk` 및 `sbrk` 함수는..
-
[xv6] Log프로젝트/운영체제 만들기 2023. 7. 25. 17:33
글의 참고 - https://github.com/mit-pdos/xv6-public/tree/master - xv6 - DRAFT as of September 4, 2018 글의 전제 - 밑줄로 작성된 글은 강조 표시를 의미한다. - 그림 출처는 항시 그림 아래에 표시했다. 글의 내용 : 모든 기술에는 반드시 필요성이 존재한다. 그런데, FAT12/16/32를 공부할 때는, `충돌`에 대한 고려를 전혀하지 않았는데, 유닉스 계열의 파일 시스템은 초기부터 이 부분에 대한 고려가 있는 것 같다. `log` 파트는 `xv6`를 공부하면서 제일 이해가 가지 않았던 파트이다. 그래서 `log` 파트는 소스 분석보다는 먼저 문서를 통해 해당 기술에 대한 필요성을 인식해야 할 것 같다. One of the most ..
-
[xv6] Buffer Cache프로젝트/운영체제 만들기 2023. 7. 24. 23:53
글의 참고 - https://github.com/mit-pdos/xv6-public/tree/master - xv6 - DRAFT as of September 4, 2018 글의 전제 - 밑줄로 작성된 글은 강조 표시를 의미한다. - 그림 출처는 항시 그림 아래에 표시했다. 글의 내용 - Buffer cache layer : `xv6` 에서 버퍼 캐시는 2가지 역할을 한다. 메모리와 디스크이 동기화를 맞추고, 실제 퍼포먼스를 위해 자주 사용되는 블락들을 캐쉬한다. 각 버퍼 캐시는 자신만의 `슬립-락`을 가지고 있어서, 어느 한 시점에 하나의 스레드만 접근할 수 있다는 것을 보장한다. `bread`를 통해서 `락-버퍼 캐시`를 반환받고, `brelse` 함수를 통해서 해당 락을 푼다. The buffer ..
-
[xv6] inode프로젝트/운영체제 만들기 2023. 7. 24. 19:19
글의 참고 - https://github.com/mit-pdos/xv6-public/tree/master - xv6 - DRAFT as of September 4, 2018 글의 전제 - 밑줄로 작성된 글은 강조 표시를 의미한다. - 그림 출처는 항시 그림 아래에 표시했다. 글의 내용 : 아래는 `xv6`의 `fs.c` 파일에서 `inode`에 대해 설명하는 글이다. 중요한 변수 및 함수들에 핵심적인 부분들이 간략하게 정리되어 있다. // Inodes. // // An inode describes a single unnamed file. // The inode disk structure holds metadata: the file's type, // its size, the number of links ..