운영체제 수업을 수강하며 정리한 내용을 작성하려고 합니다.
프로그램이 만들어지는 과정

- Source code (.c files)
- 프로그램이 수행하고자 하는 작업이 프로그래밍 언어로 표현
- Object file (.o file)
- 컴퓨터가 이해할 수 있는 기계어로 구성된 파일, 자체로는 실행 불가.
- Relocatable addresses (relative addresses)로 표현
- 심볼들의 주소가 상대적인 값으로 표현
- e.g., 처음 주소로부터 15 byte 떨어진 지점
- 소스 코드 하나 당 object file 하나
- Executable (.exe file)
- 특정한 환경(OS)에서 수행될 수 있는 하나의 실행 파일
- 프로세스로의 변환을 위한 header, 작업 내용인 text, 필요한 데이터인 data를 포함
- 절대 주소로 표현
- 심볼들의 주소가 절대값으로 표현 (e.g., 0x0100 3F0A)
- persistent(실행 파일) vs non-persistent(프로세스)
- 컴파일러/링커: OS와 CPU에 따라 다른 형태의 파일을 생성
- 링커는 라이브러리를 어떻게 executable에 엮을까?
Linking: static vs dynamic
- Linker가 라이브러리를 로드하는 방식
- Static linking
- 프로그램에 사용할 라이브러리를 컴파일 타임에 전부 복사하는 방식
- 단점: 여러 소스 코드에서 같은 라이브러리를 사용한다면?
- Dynamic linking
- 라이브러리가 별도로 존재하며, 런타임에 라이브러리와 연결하는 방식
- 단점: 로드하는 시간이 길어짐
Static linking vs Dynamic linking

-
Dynamic linking의 장점
- Executable 하나의 크기가 작아짐
- 동일한 라이브러리 코드를 공유하므로, 메모리와 저장공간 낭비가 적음
-
Dynamic linking의 단점
- Executable의 로딩 타임이 길다
- 이식성 문제 - 다른 기기에서 실행 시 라이브러리가 존재해야 하고, 새로 컴파일해야 한다
-
Executable 크기

Static이 2배 ~ 6배가량 크다

Process의 정의
💡 Process란, 실행 중인 프로그램을 의미한다.
Abstracion이 필요한 이유
- Resource sharing
- CPU, 메모리 등 자원을 공유(스케줄링)하기 위한 단위
- 각 프로세스 입장에서는 CPU 등 자원을 독점 사용하는 것으로 간주
- Protection domain

상호 침범을 막는다.
Process의 자원 및 생성
- 프로세스에 할당된 자원과 Abstraction
- 메모리: (virtual) Address space
- 스토리지: (opened) files
- 네트워크: (opened) sockets