페이지 디렉토리, 페이지 오프셋 이용해서 어떻게 찾아가는지???
vaddr.h, mmu.h
pml4는 디렉토리와 같다
임의의 pml4도 n개의 엔트리들로 구성되어있다
어떤 임의의 pml4의 시작부분부터 N칸만큼 이동하면, N번째 임의의 pml4에 대해 N번째 엔트리가 나올 것이다
(= 어떤 pml4의 기준주소로부터 offset만큼 이동하면 해당 pml4엔트리를 만날 수 있다 )
KERN_BASE = 42 하드코딩의 의미
유저메모리.. 나는 어디에 저장해(??)
PTE(페이지 테이블 엔트리)
페이지 테이블, 페이지 디렉토리는 둘다 RAM에있는가?
Linux 커널에서 사용자 공간 메모리에 액세스하는 방법은 무엇입니까?
NOT_REACHED() 의 의미??
여기오면 커널이 혼란스러워함(헐… 여기 오면안되는데…. 그냥 패닉 내야겠당ㅎㅎ)
thread 구조체에 All_elem 언제쓰누???
프로세스 디스크립터, 파일 디스크립터 테이블
**fdt
(File Descriptor Table)PageFault를 이용하여 bad-ptr-attack(string copy)을 방어하려고 할 때, 왜 rax
레지스터를 0Xffffffff
로 설정하여 주는지?
0xffffffff = -1임, 어셈블리로 -1 set 쉽게 해주려고
그냥 exit(-1)을 빠르게 하기 위한 장치임
이번 과제에서 HEAP 영역을 쓰면 안 되는 걸까??
Page할당은 힙도 스택도 아닌 영역에 할당된다
syscall.c의 case문에서 a label can only be part of a statement and a declaration is not a statement
에러가 뜸
exec에서는… fn_copy에 palloc을 하고, 거기에 strlcpy를 해준다. 왜 할당된 페이지에 해주는가? 거기에 프로그램이 올라가지는 않겠지? 단순 이름이 너무 길까봐 palloc을 해주는건가? malloc으로는?해주면 안되나?
우리의 fork가 잘 안되었던 이유?
아래와 같은 레지스터들을 복사해야함
하지만 syscall을 통해 건내받은 레지스터들에는 충분한 인자들이 전달되지 않았음
파일 디스크립터 닫을 때, NULL만났다고해서 바로 for문 멈추면 안된다. file discriptor에 너가 닫은 디스크립터는 NULL로 되어있을것이다.
file descriptor[128]로 정적할당을 해준다? 공간이 부족할수도 있으니 palloc으로 해주자
if_ 는 어찌 될지 모르니 해당시점을 세이브해서 전달해주자. do_iret이 되면 parent의 inturrupt frame값이 어떻게 될까?
argument_stack()은 C언어 실력이다. 주변사람들의 정답코드의 hex_dump()콘솔 결과값과 비교하면서 완벽하게 완성하고 가는게 좋았을 것 같다.(답을 보라는 소리가 아님)
fork, wait을 만들었다고 테스트가 통과되지 않는다. fork-once테스트에는 fork, wait밖에 없지만 exit까지 전부 구현을 해야 가장 간단한 형태의 fork도 통과를 할 수 있다.
duplicate_pte에서 writable가 항상 True는 아니다.
fork도 필요한 이유가 있었다. 포크하는 시점이 중요하기 때문
list_all_elem으로 메모리관리할때 편하게 삭제 가능
argument_stack 정적할당 해버리면, 파일이름 너~무 긴거는 담을 수 없음, 그리고 실제로 해당 테스트가 있음
핀토스는 디버깅을 위한 과제이다, 컴퓨터의 동작 자체는 양이 얼마 안됨(프로젝트1개당 유튜브인강 기준 2~3시간 컷)