프로젝트/운영체제 만들기
-
[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비트 커널을 로드하면 안될까? 당연히 그게 가장 좋다고 생각된다. 그러나, 드라이버 드라이버 ..
-
[x86] 멀티 부트프로젝트/운영체제 만들기 2023. 6. 27. 17:20
글의 참고 - https://www.gnu.org/software/grub/manual/multiboot2/multiboot.html 글의 전제 - 밑줄로 작성된 글은 강조 표시를 의미한다. - 그림 출처는 항시 그림 아래에 표시했다. 글의 내용 - Overview : 멀티 부트는 부트 로더와 운영 체제 사이의 인터페이스를 정의한 스펙이다. 멀티 부트2에서 중요시 다루는 3가지 요점은 아래와 같다(참고로, 멀티 부트는 스펙 1, 2로 나뉘어져 있다. 당연히 2가 최신이다) 1" 부트 로더 입장에서 본 OS 이미지 포맷 2" 부트 로더가 운영체제를 시작시킬 때, 머신의 상태 3" 부트 로더가 운영체제에게 파라미터를 던질 때 파라미터의 포맷 - 운영체제 이미지 포맷 : 운영체제 이미지 파일은 대개 표준 32..