Summary
- source code가 compiled되면, object file을 생성한다.
-> physical memory 위치에 load된다.- Linker는 object file들을 합쳐 하나의 binary 실행 파일을 만든다.
또한, library를 실행 파일에 연결한다.- program은 실행 가능한 binary 형태로 secondary storage에 저장된다.
- 이 program은 loader가 memory에 가져와야 실행할 수 있다.
- Relocation(linking and loading)은 program의 한 part에 최종 주소를 할당하고, 해당 주소에 맞게 code와 data를 조정한다.
- object file과 실행 파일은 표준 포맷이 있어 OS가 load, start를 할 수 있다.
Summary
- OS 설계 및 구현은 "해결 가능"이 아니지만, 일부 접근 방식은 성공적이었음이 입증되었다.
- OS에 따라 내부 구조가 크게 달라질 수 있다.
- 목표와 사양을 중심으로 설계를 시작한다.
-> Hardware나 시스템 유형의 영향을 받는다.User의 목표
- 편한 사용, 배우기 쉬움, 신뢰성, 안전성, 빠르기
System의 목표
- 쉬운 설계, 구현, 유지
- 유연함, 신뢰성, 오류X, 효율성
Important principle to separate
Policy: What will be done?
Mechanism: How to do it?
-> Mechanisms determine how to do something, policies decide
what will be done
The separation of policy from mechanism is a very important principle, it allows maximum flexibility if policy decisions are to be changed later
Summary
분리원칙 (Segregation Principle)
정책 : 무엇을 할 것인가?
매커니즘 : 어떻게 할 것인가?정책을 메커니즘에서 분리하는 것은 매우 중요한 원칙이며, 정책 결정이 나중에 변경되도록 할 경우 최대한의 유연성을 허용한다.
- OS를 지정, 설계하는 것은 software engineering의 매우 창의적인 작업이다.
- 현재는 여러 언어로 구현되어 쓰이고 있다.
Summary
- 초기 OS는 Algol, PL/1과 같은 assembly language로 만들어졌다.
- 현재는 여러 language가 mix되어 쓰인다.
-> Lowest levels에는 assembly가 쓰이고, Main은 C이다.
-> Systems programs에는 C나 C++이 쓰이고,
-> PERL, Python, shell scripts와 같은 scripting languages가 쓰인다.- high-level languages는 다른 hardware에 비해 적용시키기 더 쉽다.
-> 하지만 더 느리다.- Emulation을 통해 OS를 해당 hardware가 아닌 곳에서 돌릴 수 있다.
Emulation : 하나의 시스템이 다른 시스템을 흉내 내도록 하는 것