세리프 따라잡기
WEEK09 - PintOS project2 - Argument Passing 본문
프로그램이 system calls를 통해 os와 상호 작용할 수 있도록.
각 프로세스에는 하나의 스레드만 존재 (멀티 스레드 x)
user program에서 운영체제를 테스트함
우리가 수정해야 할 목록 [introduction]
Source Files
syscall.c, syscall.h
사용자 프로세스가 일부 커널 기능에 액세스하고자 할 때마다 시스템 호출을 호출합니다. 이것은 스켈레톤 시스템 호출 처리기이다.
프로젝트의 파트 2에서는 시스템 호출에 필요한 다른 모든 작업을 수행할 코드를 추가
Q. 스켈레톤 시스템 호출 처리기가 뭐죠? (검색해도 안 나오네ㅠ)
exception.c, exception.h
전부는 아니지만 프로젝트 2의 일부 솔루션은 이 파일의 page_fault()를 수정해야 한다
filesys.h 및 file.h 인터페이스를 통해 파일 시스템 사용 방법, 특히 많은 제한 사항을 이해할 수 있다.
--fs-disk
파일 시스템이 포맷되고 포맷이 완료되는 즉시 핀토스가 종료
개념적으로 각 프로세스는 자신의 사용자 가상 메모리를 자유롭게 배치할 수 있다. 실제로 사용자 가상 메모리는 다음과 같이 배치
USER_STACK +----------------------------------+
| user stack |
| | |
| | |
| V |
| grows downward |
| |
| |
| |
| |
| grows upward |
| ^ |
| | |
| | |
+----------------------------------+
| uninitialized data segment (BSS) |
+----------------------------------+
| initialized data segment |
+----------------------------------+
| code segment |
0x400000 +----------------------------------+
| |
| |
| |
| |
| |
0 +----------------------------------+
+ bss란?
.bss(Block Started by Symbol): 컴파일러와 링커에서 쓰이는 용어, 컴퓨터 프로그래밍에서 .bss 또는 bss는 / 수많은 컴파일러와 링커가 처음에 0 값의 비트로 표현되는 정적으로 할당된 변수를 포함하는 데이터 세그먼트의 한 부분으로 사용. "bss 섹션"(bss section), "bss 세그먼트"(bss segment)라고도 부른다. 즉, 초기화되지 않은 전역 데이터를 위한 영역이다.
Argument Passing
사용자 프로그램에 대한 인수 설정 process_exec()
Unix의 64비트 x86-64 구현에서 일반 함수 호출에 사용되는 규칙의 중요한 사항을 요약
1.사용자 수준 응용 프로그램은 %rdi, %rsi, %rdx, %rcx, %r8 및 %r9 시퀀스를 전달하기 위한 정수 레지스터로 사용합니다.
#레지스터 참고 블로그
2.호출자는 스택에서 다음 명령의 주소(반환 주소)를 누르고 호출자의 첫 번째 명령으로 이동합니다. 단일 x86-64 명령어인 CALL은 두 가지 기능을 모두 수행합니다.
3.호출자가 실행됩니다.
4.호출자가 반환 값을 갖는 경우, 레지스터 RAX에 이를 저장합니다.
5.호출자는 스택에서 반환 주소를 팝하고 x86-64 RET 명령을 사용하여 지정한 위치로 점프하여 반환합니다.
이번 프로젝트의 개요:
user programs를 동작시키기 위한 구현을 하는 것.현재 아무것도 하지 않은 상태에서는 user program을 로딩하고 실행시키는 것은 되지만, I/O같은 인터랙티브는 가능하지 않은 상태 == 실행만 되고 입출력 안 된다고~
+ interactive란? 인터랙티브 컴퓨터 시스템은 사용자가 데이터나 명령을 입력할 수 있도록 한 프로그램이다. 이 용어는 사용자와 컴퓨터가 마치 대화를 하듯이, 컴퓨터가 출력한 내용에 따라 사용자가 적절한 입력을 하는 식으로, 입력과 출력이 공존하는 프로그램을 가리킨다.
이번 프로젝트에서는 system calls를 통해 프로그램과 OS가 interact 할 수 있도록 하는 것.
이전에 했던 것은 커널에 직접적으로 테스트 코드를 컴파일하기 때문에 커널 내에 특정한 함수를 요구했지만, 지금은 user program을 실행시킴으로써 더 자유성은 있지만 kernel code를 수정하는데 있어 제약사항이 있음.
ㅇ
ㅇ
'SW사관학교 정글' 카테고리의 다른 글
WEEK10 - PintOS Project2 - WIL (0) | 2022.06.02 |
---|---|
WEEK10 - PintOS project2 참고 사이트 정리 (0) | 2022.05.29 |
WEEK08 - PintOS Project1 - WIL (0) | 2022.05.25 |
WEEK08 - TIL - priority scheduling (0) | 2022.05.23 |
[CS study] - 3 (0) | 2022.05.20 |