공부/그 외

운영체제 아주 쉬운 세가지 이야기 1강~8강 정리본

0202_hyeon 2024. 2. 13. 19:14
반응형
SMALL

https://devyonghee.github.io/study/2022/11/07/operation-system-three-easy-pieces-1-2/

 

[Study] 운영체제 아주 쉬운 세가지 이야기 1~2장

 

devyonghee.github.io

https://devyonghee.github.io/study/2022/11/10/operation-system-three-easy-pieces-3-6/

 

[Study] 운영체제 아주 쉬운 세가지 이야기 3장~6장

 

devyonghee.github.io

https://devyonghee.github.io/study/2022/11/12/operation-system-three-easy-pieces-7-10/

 

[Study] 운영체제 아주 쉬운 세가지 이야기 7장~11장

 

devyonghee.github.io

요건 보다가 정리 넘 잘해주셔서 공유(보면서 공부하면 훨 이해가 잘 되는 것 같음)

---------------------------------------------------------------------------------------------------------------------------------------------------

출처는 위의 깃헙 블로그

이 부분이 잘 이해가 안 가서 좀 더 보충 설명을 해보자면

프로그램(디스크 상에 존재하며, 실행을 위한 명령어와 정적 데이터의 묶음)이 어떻게 프로세스(실행 중인 프로그램)로 변형되는가, 

운영체제는 어떻게 프로그램을 준비하고 실행시키는가,

실제로 어떻게 프로세스를 생성하는가

를 알아보자.

 

프로그램 실행을 위해 운영체제가 하는 첫 번째 작업은 프로그램 코드와 정적 데이터를 메모리, 프로세스의 주소 공간에 로드하는 것이다.

프로그램은 디스크나 플래시 기반 SSD에 실행 파일 형식으로 존재한다고 한다.

참고 출처는 https://tech.kakao.com/2016/07/18/coding-for-ssd-part-6/

 

코드와 정적 데이터를 메모리에 탑재하기 위해 운영체제는 디스크의 해당 바이트를 읽어서 메모리의 어딘가에 저장해야 한다.

초기 운영체제들은 프로그램 실행 전에 코드와 데이터를 모두 메모리에 탑재하였으나, 현대의 운영체제들은 이 작업을 늦춰서 프로그램을 실행하면서 필요할 때, 필요한 부분만 메모리에 탑재한다고 한다.

이 부분의 이해를 위해서 페이징과 스와핑 동작의 이해가 필요하다고..(이 부분은 나중에 공부한다고 하고 넘어갔다)

 

아무튼, 코드와 정적 데이터가 메모리로 탑재된 후, 프로세스를 실행시키기 전에 운영체제가 해야 할 일이 몇 가지 있는데, 특정 크기의 메모리 공간이 프로그램에 스택용도로 할당되어야 한다고 한다.(C프로그램은 스택에 지역 변수, 함수 인자, 리턴 주소 등을 저장하기 때문)

운영체제는 스택을 주어진 인자로 초기화한다고 한다. 특히, main()함수의 인자인 argc와 argv 벡터를 사용하여 스택을 초기화한다고..

 

또, 운영체제는 프로그램의 힙을 위한 메모리 영역 역시 할당하는데, C프로그램에서 힙은 동적으로 할당된 데이터를 저장하기 위해 사용한다.

 

운영체제는 입출력과 관련된 초기화 작업 역시 수행하는데, UNIX 시스템에서 각 프로세스는 기본적으로 STDIN-표준입력/STDOUT-표준출력/STDERR-표준에러 장치에 해당하는 세 개의 파일 디스크립터를 갖는다고 한다.

 

각설하고, 이렇게 코드와 정적 데이터를 메모리에 탑재하고, 스택과 힙을 생성하고 초기화하고, 입출력셋업과 관게된 다른 작업을 마치게 되면, 운영체제는 프로그램 실행을 위한 준비를 마치게 된다고 한다!

반응형
LIST