프로젝트/운영체제 만들기
-
[xv6] Scheduling프로젝트/운영체제 만들기 2023. 7. 17. 21:18
글의 참고 - 글의 전제 - 밑줄로 작성된 글은 강조 표시를 의미한다. - 그림 출처는 항시 그림 아래에 표시했다. 글의 내용 - 타이머 스케줄링 : `xv6`에서 타이머가 호출되면, 직접적으로 프로세스 스케줄링을 하는 것이 아니라, 프로세스들중에서 `SLEEPING`인 프로세스를 `RUNNABE`로 바꾸기만 한다. 실제 스케줄링을 하는 프로시저인 `sched` 프로시저를 호출하지는 않는다. `xv6`에서는 모든 인터럽트 및 트랩은 `trap` 함수에서 관리한다. `trap`에서는 제일 먼저 시스템 콜인지 체크한다. 그리고, 아니라면 인터럽트 및 익셉션인지를 확인한다. 타이머 인터럽트라면, `wakeup` 함수를 호출한다. // trap.c uint ticks; ... ... //PAGEBREAK: 41..
-
[xv6] Spinlock프로젝트/운영체제 만들기 2023. 7. 17. 18:37
글의 참고 - https://github.com/mit-pdos/xv6-public/tree/master 글의 전제 - 밑줄로 작성된 글은 강조 표시를 의미한다. - 그림 출처는 항시 그림 아래에 표시했다. 글의 내용 - 개요 : 레이스 컨디션을 막으려면, 즉, `상호 배제`가 되려면 2가지가 보장되어야 한다. 0" 인터럽트 1" 프로세스 : 먼저 완벽한 동기화를 위해서는 하드웨어의 지원이 반드시 필요하다. 인터럽트를 막기 위해서는 인터럽트를 비활성화 시키면 된다. 그리고, 멀티 프로세서 환경이라면, 현재 작업중인 프로세스는 다른 프로세스에게 선점되서는 안된다. 기본적으로 공유 메모리에 대한 `ATOMIC OPERATION` 기능을 통해서 크리티컬 섹션에 동기화가 이루어진다. - 소스 분석 : `xv6`..
-
AT & T 문법프로젝트/운영체제 만들기 2023. 7. 15. 02:05
글의 참고 - https://onecellboy.tistory.com/50 글의 전제 - 밑줄로 작성된 글은 강조 표시를 의미한다. - 그림 출처는 항시 그림 아래에 표시했다. 글의 내용 상수(constant)와 immediate 값 : 모든 상수와 immediate 값에는 $가 붙는다. 예를 들어 숫자 5를 나타내려면 $5라고 한다. 변수의 주소를 나타낼 때에도 앞에 $를 붙인다. 예를 들어 foo란 변수의 주소는 $foo이다. 그냥 foo라고 하면 변수의 값을 나타내게 된다. foo 변수의 주소를 eax 레지스터로 복사하는 것은 : AT&T : movl $foo, %eax Intel : mov eax, foo foo의 값을 eax 레지스터로 복사하는 것은 : AT&T : movl foo, %eax I..
-
xv6 - System Call & Traps프로젝트/운영체제 만들기 2023. 7. 12. 17:07
글의 참고 - book-rev11.pdf - https://github.com/mit-pdos/xv6-public - https://pdos.csail.mit.edu/6.828/2022/xv6.html - https://wiki.osdev.org/Xv6 글의 전제 - 32비트 x86 기반의 xv6 rev-11을 내 나름대로 분석한 내용이다. 글의 내용 - Systems calls, exceptions, and interrupts : `xv6`에서 모든 인터럽트들은 프로세스가 처리한다기 보다는 커널에서 처리한다. 예를 들어, `xv6`에서 스케줄러는 실제 프로세스라기 보다는 커널의 일부분이다. 스케줄러(커널)는 타이머 인터럽트를 받아서 현재 동작중인 프로세스에게서 CPU를 선점해서 다른 프로세스에게 할당한..
-
xv6 - Init process프로젝트/운영체제 만들기 2023. 7. 12. 15:18
글의 참고 - book-rev11.pdf - https://github.com/mit-pdos/xv6-public - https://pdos.csail.mit.edu/6.828/2022/xv6.html - https://wiki.osdev.org/Xv6 글의 전제 - 32비트 x86 기반의 xv6 rev-11을 내 나름대로 분석한 내용이다. 글의 내용 - Abstracting physical resources : 유저 애플리케이션이 하드웨어 직접적으로 접근해서 사용하면 운영체제를 거처셔 접근할 때보다 성능면에서 더 좋은 퍼포먼스를 낼 수 바께 없다. 그리고 성능 및 레이턴시에 대한 예측이 수월해지기 때문에 최적화 또한 상대적으로 쉬워진다. 그래서 실제로 OS가 없는 펌웨어들은 OS가 들어가는 펌웨어보다 ..
-
[xv6] Page tables 상세 분석 1프로젝트/운영체제 만들기 2023. 7. 12. 03:11
글의 참고 - book-rev11.pdf - https://github.com/mit-pdos/xv6-public - https://pdos.csail.mit.edu/6.828/2022/xv6.html - https://wiki.osdev.org/Xv6 글의 전제 - 밑줄로 작성된 글은 강조 표시를 의미한다. - 그림 출처는 항시 그림 아래에 표시했다. 글의 내용 - Paging hardware : 32비트 x86에서 페이지 테이블은 2^20개의 페이지 엔트리와 같다. 하위 12비트는 오프셋으로 변환이 필요없는 실제 물리 주소이다. 그러므로, 32비트 x86에서 변경되는 부분은 상위 20비트가 변경된다. PTE 하나는 4KB를 차지하므로, 이게 2^20개 있으면 4GB가 된다. 그러나, `xv6`는 페이..
-
TSS프로젝트/운영체제 만들기 2023. 7. 6. 00:26
글의 참고 - 64-ia-32-architectures-software-developer-vol-3a-part-1-manual.pdf 글의 전제 - 밑줄로 작성된 글은 강조 표시를 의미한다. - 그림 출처는 항시 그림 아래에 표시했다. 글의 내용 - 태스크 매니지먼트 개요 ( 7.1 ) A task is a unit of work that a processor can dispatch, execute, and suspend. It can be used to execute a program, a task or process, an operating-system service utility, an interrupt or exception handler, or a kernel or executive utilit..
-
[x86] Unreal mode프로젝트/운영체제 만들기 2023. 6. 28. 18:57
글의 참고 - https://en.wikipedia.org/wiki/Unreal_mode - https://wiki.osdev.org/Unreal_Mode - https://riptutorial.com/x86/example/19574/unreal-mode 글의 전제 - 밑줄로 작성된 글은 강조 표시를 의미한다. - 그림 출처는 항시 그림 아래에 표시했다. 글의 내용 - 언리얼 모드를 사용하는 이유 : 리얼 모드에서 1MB이상에 보호 모드 커널을 로드하고 싶은 경우 사용한다. 이렇게 생각할 수 도 있다. 보호 모드를 `부트 로더 + 커널`로 나누고, 부트 로더를 1MB 아래에 로드하고, 32비트 부트 로더에서 32비트 커널을 로드하면 안될까? 당연히 그게 가장 좋다고 생각된다. 그러나, 드라이버 드라이버 ..