핀토스
-
[PintOS] Project 2 - System Call (3)Projects/Krafton_Jungle_4 2024. 3. 20. 10:18
(2)에 이어서 구현중이다 close 파일디스크립터를 닫는다. 프로세스가 종료되거나 중단될 때, 해당 프로세스의 모든 열린 파일 디스크립터가 암묵적으로 닫힌다. 마치 이 함수를 각각의 파일 디스크립터에 대해 호출한 것과 같은 효과가 있다. 구현을 위해서는 file_close를 사용해야하고, 파일 디스크립터 테이블에서 fd에 해당하는 파일을 제거하는 함수를 새로 만들어 주어야 한다. // userprog/process.c void process_close_flie(int fd) { struct thread *curr = thread_current(); curr->fdt[fd] = NULL; } // userprog/syscall.c void close(int fd) { file_close(process_g..
-
[PintOS] Project 2 - Argument Passing (2)Projects/Krafton_Jungle_4 2024. 3. 16. 14:24
이제 user_stack에 문자 배열과 문자열 개수를 전달하는 작업을 수행해야 한다. load()에서 setup_stack() 을 통해 인터럽트 프레임의 rsp의 위치를 USER_STACK으로 설정해 두었다. 주소는 0x47480000 이다. 그전에 각각의 레지스터들이 어떤 역할을 하는지 정리를 해 보자 범용 레지스터 작은 데이터 저장 공간으로 연산처리, 연산 결과, 복귀 주소 등 작은 데이터를 기억하는 레지스터이다. RAX - Accumulator 주로 산술 연산에 사용되고, 함수의 반환 값도 이 레지스터를 통해 전달된다. RBX - Base 메모리 주소를 저장하기 위한 용도로 사용된다. RCX - Counter 반복문에서 카운터로 사용되는 역할이다. RDX - Data 다른 레지스터를 서포트하는 레지..
-
[PintOS] Project 2 - Argument Passing (1)Projects/Krafton_Jungle_4 2024. 3. 15. 01:03
Argument passing int main() 각종 초기화 진행 및 부팅 시작 만약 명령줄에 다음과 같이 입력되었다고 치면 read_comman_line을 통해 앞의 pintos 구동과 관련된 명령어를 제외하게 된다. pintos -v -k -T 60 -m 20 --fs-disk=10 -p tests/userprog/args-single:args-single -- -q -f run 'args-single onearg' 다음과 같은 명령어를 실행한다고 했을 때, main에 들어오게 되는 제일 처음 action과 argv는 다음과 같다. printf("Boot complete.\\n"); 후 run_actions(argv) 를 호출한다. run_action의 action 배열이 {run, 2, run_t..