WEEK09

쏠로몬·2021년 10월 9일
0

PintOS

Project 2. USER PROGRAMS

System Calls만 해결하면 다른 문제는 간단하게 해결되는 듯 (그래도 어렵지만)

2-1 Argument Passing

터미널로부터 받은(실행 시킨) 메세지를 parsing 하여 filename을 얻은 뒤, 그 프로그램을 load 하고 실행시켜야 함. 그러나 system call 부분이 구현되어 있지 않아서 hex_dupm를 통해 User stack에 데이터가 잘 들어갔는지만 확인.

2-2 User Memory

유저 메모리 접근 구현

2-3 System Calls

system call 구현

  • 구현 해야 할 기능 간략 설명

    1. void halt (void);
      PintOS 종료.

    2. void exit (int status);
      현재 user program 종료.

    3. pid_t fork (const char *thread_name);
      현재 프로세스의 복제본인 새 프로세스를 만듦.

    4. int exec (const char *cmd_line);
      프로세스 실행.

    5. int wait (pid_t pid);
      자식 프로세스가 종료 될 때까지 기다림.

    6. bool create (const char *file, unsigned initial_size);
      initial_size 크기인 file을 생성.

    7. bool remove (const char *file);
      file 삭제.

    8. int open (const char *file);
      file open.

    9. int filesize (int fd);
      file size return.

    10. int read (int fd, void *buffer, unsigned size);
      열린 file의 Data를 read함.

    11. int write (int fd, const void *buffer, unsigned size);
      열린 file에 Data를 write함.

    12. void seek (int fd, unsigned position);
      열린 파일의 offset을 position만큼 이동.

    13. unsigned tell (int fd);
      열린 파일의 offset을 알려줌.

    14. void close (int fd);
      열린 파일을 닫음.

lib/user/syscall.c를 보면 어셈블리 명령을 보내는 코드가 작성되어있다.
(static __inline int64_t syscall)

작성되어 있는 기능의 함수를 호출하면 syscall을 통해 어셈블리 명령을 하게 되고 그 결과 넘어 온 intr_frame을 가지고 syscall_handler에서 해당 기능 처리 한다.

2-4 Process Termination Messages

프로세스가 종료 되었을 때 해당 프로세스 이름 및 종료 출력하기

2-5 Denying Writes to Executables

실행 파일에 대한 쓰기 거부하기.

2-6 Extend File Descriptor (Extra)

File Descriptor가 같은 File을 Open(참조)한 상태로 만들기.

진행 상황 공유

여러 코드를 참고하여 학습 및 테스트 통과는 하였지만 저 같은 경우에는 아직 이해도 겨우 하는 수준입니다. project 3부터는 더 힘겨울 것 같습니다. 이번 같은 팀 조원들 정말 고생하셨습니다!

profile
이사가요~ 티스토리 블로그 입니다. https://help-solomon.tistory.com/

0개의 댓글