세리프 따라잡기

WEEK09 - PintOS project2 - Argument Passing 본문

SW사관학교 정글

WEEK09 - PintOS project2 - Argument Passing

맑은 고딕 2022. 5. 26. 23:22

프로그램이 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
Comments