본문 바로가기

basic

[Python] Poetry가 너무 느릴 때, 해결 방법 poetry add 명령어를 수행할 때 Dependency Resolving으로 인해서 매우 느릴 때가 있습니다. Cache를 날려서 빠르게 할 수 있습니다. sudo poetry cache clear --all pypi 링크: https://www.reddit.com/r/learnpython/comments/zcb95y/poetry_taking_too_long_to_resolve_dependencies/ 더보기
운영체제 만들기 목차 https://blog.noelbird.com/126 더보기
[OS만들기] day 02: bootloader 만들기 오늘 만든 결과물 소스코드 부트로더를 이용해서 커널로 점프한 후, 글자 출력 bootloader.asm ; bootloader.asm [org 0] jmp 07C0h:start ; cs, ds, es 세그먼트를 초기화 start: mov ax, cs; BIOS에서 cs를 0, ip를 07c0으로 셋팅했음 mov ds, ax mov es, ax mov ax, 0xB800 mov es, ax ; es에 비디오 메모리 영역을 넣음 mov di, 0 ; destination index를 0으로 세팅 mov ax, word [msgBack] mov cx, 0x7FF ;2047 paint: ; 화면 전부를 .으로 찍음 mov word [es:di], ax add di, 2 dec cx jnz paint ; int .. 더보기
[OS만들기] day 20: 유저 모드와 콜 게이트 # src/init.inc SysCodeSelector equ 0x08 SysDataSelector equ 0x10 VideoSelector equ 0x18 TSSSelector equ 0x20 UserCodeSelector equ 0x28+3 UserDataSelector equ 0x30+3 # src/boot.asm %include "init.inc" [org 0] jmp 07C0h:start start: mov ax, cs mov ds, ax mov es, ax mov ax, 0xB800 mov es, ax mov di, 0 mov ax, word [msgBack] mov cx, 0x7FF paint: mov word [es:di], ax add di, 2 dec cx jnz paint read: .. 더보기
[OS만들기] day19: usermode task switching # init.inc SysCodeSelector equ 0x08 SysDataSelector equ 0x10 VideoSelector equ 0x18 TSSSelector equ 0x20 UserCodeSelector equ 0x28+3 UserDataSelector equ 0x30+3 # boot.asm %include "init.inc" [org 0] jmp 07C0h:start start: mov ax, cs mov ds, ax mov es, ax mov ax, 0xB800 mov es, ax mov di, 0 mov ax, word [msgBack] mov cx, 0x7FF paint: mov word [es:di], ax add di, 2 dec cx jnz paint read: mov ax, .. 더보기
[OS만들기] day18: protection 콜게이트 낮은 특권 레벨의 프로그램이 실행 도중 높은 특권 레벨로 변경되는 수단은 대표적으로 인터럽트, 예외, 콜게이트가 있습니다. 이 중 하드웨어 인터럽트와 예외에서는 낮은 특권 레벨 프로그램이 자신의 의지와는 상관없이 특권 레벨의 변경이 이루어지고, 소프트웨어 인터럽트와 콜게이트는 낮은 특권 레벨의 프로그램이 자신의 의지에 의해 높은 특권 레벨의 루틴을 잠깐 사용하는 것입니다. 우리가 호적등본을 발급받으려 할 때 동사무소에 갑니다. 간단한 신청서를 작성하여 창구에 제출하면 동사무소 직원은 귀중한 서류들이 있는 곳으로 다녀와서 서류를 복사하고, 도장을 찍어 우리에게 건네줍니다. 우리는 정부기관에 접근할 때에는 항상 각각의 창구를 이용합니다. 동사무소는 정부기관 루틴의 일부이며, 거기에 있는 서류들은 귀.. 더보기
[OS만들기] day17: protection day 17: 보호(2) Protected Mode로 넘어온 후에는 CPU는 각 명령어마다 아래와 같은 체크를 하고, 합당한 명령만 실행시키고, 합당하지 않다면 폴트를 발생시켜 커널이나 유저 프로그램이 자신이 이 에러를 다시 조정하도록 합니다. Limit 체크 Type 체크 특권 레벨 체크 명령 세트 체크 CPU의 체크 포인트 Limit 체크 세그먼트 디스크립터의 Limit은 프로그램 또는 프로세스가 세그먼트 외의 메모리 위치를 오프셋으로 지정하지 못하게 합니다. 세그먼트 디스크립터 내의 G 비트가 0일 때에는 Limit을 0~0xFFFFF(1MB)까지 선택할 수 있습니다. 이 의미는 세그먼트 영역의 크기를 0으로 지정해도 되고, 0xFFFFF로 지정해도 된다는 뜻입니다. 세그먼트 영역에서 유효 Limi.. 더보기
[OS만들기] day 16: CALL 명령에 의한 Task Switching 오늘의 결과 jmp를 사용한 task switching인 day 12에서의 결과와 같습니다. jmp 명령에 의한 Task Switching과 다른 점은, 컨텍스트 스위칭을 할 때 JMP 명령 => CALL 명령 task를 처리하는 루틴에서 JMP 명령으로 컨텍스트 스위칭 => IRET 이 두 가지입니다(단 두 줄). 소스코드 kernel.asm ; src\kernel.asm %include "src/init.inc" [org 0x010000] [bits 16] start: cld ; Advance = inc mov ax, cs mov ds, ax xor ax, ax mov ss, ax xor ebx, ebx lea eax, [tss1] ; EAX에 tss1의 물리 주소를 넣습니다. add eax, 0x1.. 더보기