구현 중 힘들었던 점
1. OS개념부족(프로젝트 1에서 C에 나름 익숙해지고 sudo코드만 보고 짠게 돌아가니깐 신남 -> 내가 뭘 구현하는지조차 모르고 딥다이브 반복 -> 에러 발생시 머리 깨짐)
2. Lock을 마구 걸어주다가 다른곳에서 터짐
3. fork()를 왜하는지 모름 근데 만들어야되는 코드도 제일 까다로움
구현 후 추가 궁금증
Q. 프로세스를 생성할때, fork() 시스템콜로 현재 프로세스를 복사한 후, exec()시스템 콜로 자식프로세스의 내용을 변경하는 식으로 프로세스를 생성하는데 자식 프로세스와 부모프로세스의 차이점은 머임?
A. 자식 프로세스는 자신의 주소공간, 자신의 레지스터, 자신의 PC(Program Counter(PC, 프로그램 카운터) : 다음에 수행될 명령어의 주소를 가지고 있는 레지스터)값을 가지며 부모랑 자식의 시스템 콜의 반환값이 서로 다르다.
--> 따라서 부모와 자식 프로세스가 서로 다른 코드를 실행하는 프로그램을 쉽게 작성할수있다.
--> 즉 부모의 모든 것을 복사해오는것이 아니다.
Q. 1. 새로 생성하는것(load()) VS 1. 복사해서(fork()) 2. 수정한놈 실행(exec()) 중 후자를 선택하는 이유?
A. 세가지 이유가 있는데
1. 복제라는 작업 자체가 빈 메모리 공간에 새로운 공간을 할당하고, 새 프로그램을 로드하는 것보다 간단하다(템플릿을 가져다가 쓰는 것과 비슷한 느낌이다)
2. Copy On Write 로 인해서 복제의 비용이 거의 들지 않는다.
Copy On Write? - 평소에는 Resource를 공유하다가, Resource를 수정할 경우가 발생할 때가 되서야 이전 Resource의 데이터를 실제로 복사하여 사용한다.
3. 부모 프로세스를 종료하면 자식 프로세스도 정리되는 것처럼, 관리의 용이성 측면도 있다.
참고 자료 - Operating Systems THREE EASY PIECES 5장, https://wslog.dev/fork-exec
ps. 검증되지않은 자료로 짜진 코드가 C에 익숙치않은 팀원 코드보다 더 무서움
-> 뭔가 그럴듯해서 홀림
그럴듯하게 말하면서 C모르고 코드짜는 팀원?
지금이야 그렇게 많은 지식을 요구하지않는 수준의 구현이라 큰 문제를 겪지는 못했지만 검증되지 않은 자료를 너무 믿는 것은 정말 지양하자
'OS' 카테고리의 다른 글
크래프톤 정글 2기 2 PintOS Virtual Memory 중간진행 (0) | 2023.06.18 |
---|---|
크래프톤 정글 2기 2 PintOS Virtual Memory 메모리 용어정리 (0) | 2023.06.17 |
크래프톤 정글 2기 1-2 PintOS Command Line Parsing (0) | 2023.06.03 |
크래프톤 정글 2기 1-2 PintOS Priority Scheduling(우선순위 스케줄링) (0) | 2023.06.01 |
크래프톤 정글 PintOS Project 1 프로세스/스레드 (0) | 2023.05.26 |