728x90
1. 일정 계획
✅ 06.01
- 대략적인 일정 조율
- 개인 이론 공부
✅ 06.02
- gitbook 및 강의 학습
✅ 06.03 ~ 06.05
- passing argument 구현
✅ 06.06 ~ 06.11
- system call 구현
2. 주요 학습
user mode vs kernel mode
1. user mode
- User 모드에서는 제한된 시스템 자원에만 접근 가능
- 파일 시스템, 네트워크 연결, 입출력 장치등과 같은 일반적인 작업을 수행할 수 있지만, 직접적으로 시스템 리소스에 접근하거나 시스템 제어 명령을 실행할 수 없다.
2. kernel mode
- 유저 모드에서 요청 → syscall_entry를 통해 어셈블리어로 진입 → rsp = 커널 스택 포인터
- syscall_handler : 시스템 호출의 요구에 따라 필요한 작업을 수행, (ex) create요청이 들어온 상황
- check_address함수 : 주어진 주소가 유저 영역의 주소인지 확인
- filesys_create(file, initial_size)를 호출하여 파일 시스템에 새로운 파일을 생성
- 생성된 파일의 FD 값을 리턴하고 do_iret을 통해 유저 모드로 복귀하게 됩니다
3. 회고
Stack에 인자 저장하는 방식에 관한 문제
1. 오류
작성한 오류 코드
// command 오른쪽 단어부터 스택에 삽입
for (int i = argc - 1; i >= 0; i--) {
int arg_len = strlen(argv[i]);
(*rsp) -= arg_len;
memcpy(rsp, argv[i], arg_len);
argv[i] = *(char **)rsp; // 인자가 스택에 저장되어있는 주소를 배열에 저장
}
2. 정답
작성한 정답 코드
// command 오른쪽 단어부터 스택에 삽입
for (int i = argc - 1; i >= 0; i--) {
//입력 받은 인자 1개 또한 스택에 넣어주는 것이므로 오른쪽 글자부터 넣어준다.
for (int j = strlen(argv[i]); j >= 0; j--) {
(*rsp)--; // 스택 주소 감소
**(char **)rsp = argv[i][j]; // 주소에 문자 저장
}
argv[i] = *(char **)rsp; // 인자가 스택에 저장되어있는 주소를 배열에 저장
}
🗒️ 이번 주차 후기
👩🏻💻 수빈
지난주보다 차근차근 진행하면서 혼란은 덜했지만 잔실수가 많아서 시간을 많이 소비한게 아쉬웠습니다. 그래도 같이 하니까 버틸 수 있었던 것 같습니다:)
🧑🏻💻 재균
팀원들과 협업을 통해 하나의 코드를 만드는 경험이 처음이었고 좋은 경험이었습니다 :)
🧑🏻💻 진우
같이 하는 것에 조금 익숙해져서 훨씬 시간을 효율적으로 사용하였지만 아직은 조금 뭔가 아주 조금은 부족한 그런느낌? XD
728x90
'KraftonJungle2기 > 회고' 카테고리의 다른 글
[WIL] Pintos 4주차 - VM(2) (주간공유) (0) | 2023.06.25 |
---|---|
[WIL] Pintos 3주차 - VM(1) (주간공유) (0) | 2023.06.18 |
[WIL] Pintos 1주차 - Threads (주간공유) (3) | 2023.06.01 |
크래프톤 정글 2기 시작하며...🍀 (0) | 2023.04.08 |