PintOS - Project2

현집·2023년 5월 8일
0

PintOS

목록 보기
2/3
post-thumbnail

이번 글 또한 정보를 전달한다. 그러니, "PintOS 내용은 됐고~ 일기나 줍쇼!"라는 생각이 든다면?
여기로 가시면 됩니다^^

이번 주차에 가장 잘 참고했던 블로그는 여기다.
하지만 바로 보기보다는 혼자서 삽질 조금 하다가 보는걸 추천한다.
묵은 체증이 쐏 내려가는 기분이 들 것이다.

이전주차도 그렇고 이렇게 블로그 잘 정리하시는 분들을 보며, 참 많이 반성중이다. 근데 저는... 코드 구현하기 급급해서... 블로그 정리할 시간이 업서용...ㅠ


PROJECT2 : USER PROGRAMS

PROJECT1에서는 OS 커널의 일부를 구현해보고 확인해봤다.

이번 주차에는 사용자 프로그램을 OS에서 돌린다.

특권 명령에 대한 모든 접근 권한을 갖지 못했으니 조금 더 구현할게 많아지고 복잡해진다.

이번 주차는 총 2가지 단계로 구분해 볼 수 있었던 것 같다.

1. Argument Passing

2. System calls

2가지 단계로 구분하긴 했지만 argument passing은 이번주차의 5% 정도고 system call이 대부분이다.


Argument Passing

이번 주차에서 가장 처음 마주하는 함수는 process_exec이다.
현재 함수는 새로운 프로세스에 대한 인자 passing을 이루어 지지 않고 있다. 이 함수를 수정하여 프로그램 파일 이름과 인자를 통째로 보내는 것이 아니라 단어마다 parsing 해서 passing하게 끔 수정해야한다.

web server를 만들때 parsing을 해봤기에 뭐 별거 있겠어? 하고 덤볐다가 깨갱했다.

파이썬에 너무 익숙해 져버린 탓일까... split 함수를 쓰지 못하니 조금 머리가 어질어질했다.

그냥 분리해서 되는 것도 아니고, 8바이트 정렬뿐만 아니라 주어진 stack양식(?)에 맞춰서 parsing을 해야하는 것이 정말 힘들었다. (사실 이건 힘든것도 아니다)

이렇게 말이다.


System calls

시스템 콜이란 무엇일까?

  1. 운영체제가 제공하는 서비스에 대한 프로그래밍 인터페이스
  2. 사용자 모드 프로그램이 커널 기능을 사용할 수 있도록 해줌.
  3. 커널모드에서 실행되고, 처리 후 사용자 모드로 복귀됨.

왜 시스템 콜이 필요할까?
왜 커널모드와 유저모드가 나뉜걸까?

이런 궁금증을 먼저 해결해야한다.

제대로 공부하기 전에 나는 이렇게 답했다.
중요한 부분을 usermode에서 접근하면 곤란하니까... 유저랑 커널모드를 나눴고 유저가 중요한거 접근하려면 커널모드로 바꿔야 하니까 그때 system call을 보내는거 아냐?

적어 내려가면서도 참... 없어보이는 답변이라는 생각이 든닼ㅋㅋ

조금 더 디테일하고 완벽하게 설명을 해보려 한다.

커널모드와 유저모드가 분리되어 있지 않다면 모든 프로그램들이 OS에 접근가능해질것이고 이는 보안문제, 충돌문제, 효율성문제 등 다양한 문제가 일어날 수 있다.

보안 문제: 악성 코드가 쉽게 시스템에 침투할 수 있다. 악성 코드는 운영 체제에 포함된 민감한 정보를 탈취하거나 시스템의 중요한 구성 요소를 손상시킬 수 있다.

충돌 문제: 서로 다른 프로그램이 동일한 자원에 접근할 가능성이 높다. 이러한 경우 자원 충돌이 발생하거나, 프로그램 간의 충돌이 발생할 수 있다. 이는 시스템 전체의 안정성과 신뢰성에 영향을 미친다.

효율성 문제: 운영 체제는 계속해서 자원을 관리하고 프로그램들의 요청을 처리해야 한다. 이는 운영 체제의 부하를 증가시키고, 시스템의 효율성을 저하시킨다.

따라서, 운영체제의 중요한 부분을 숨기기 위해 유저모드와 커널모드를 나누었다.

그럼 유저모드에서 실행되는 응용 프로그램은 os에 접근을 영영 못하는 것일까?
아니다.

유저모드에서 실행되는 응용프로그램의 예시는 메모장이다!

메모장을 쓸때, 우리(사용자)는 파일을 저장하거나 열어야한다. 이는 운영체제에서 제공하는 파일 입출력 기능을 호출해야한다. 유저모든데!!! 어떻게???!?!?! 도와줘~ 해서 나온게 바로 system call 이다.

-> 메모장은 유저 프로그램이며, 운영 체제의 기능을 호출하기 위해 시스템 콜을 사용한다.

0개의 댓글