OS services
- UI
- Program execution에 대한 환경을 제공해줘야 한다. 프로그램을 메모리에 올리고 동작할 수 있게끔 자원을 할당해줘야 한다.
- I/O 장치들이 동작하도록 제공해야 한다.
- 파일 시스템 관리
- Networking 기능이 기본적으로 탑재가 되어야 하고, process간 소통이 되도록 제공해줘야 한다.
- 에러 감지를 해야한다.
- 자원 할당을 얼마나 누구에게 해줄지 관리해야 한다.
- Accounting: 사용자가 어떤 종류의 자원을 얼마나 사용하고 있는지에 대한 정보를 알고 있어야 한다. 그래야 어떤 것을 죽일지 살릴지 판단 가능
OS 구조
user가 system calls을 통해 kener level(low level)에서 접근할 수 있는 서비스를 사용할 수 있게 하고 또한 하드웨어에 접근할 수 있어야 한다.
System calls (중요)
- OS가 제공하는 다양한 서비스들을 접근할 수 있는 프로그래밍 인터페이스
- function의 집합
- API
- kenel 영역에 맘대로 접근해서 막 쓰도록 하지 않고 제공해주는 function만 쓸 수 있게 system call이 존재한다.
- System-call interface
- User(개발자)입장에서 대부분의 OS interface는 abstraction(굳이 몰라도 되는 형태로 압축되어서 제공되는)으로 숨겨져있기에 User는 시스템 콜의 결과만 확인하면 된다. 즉 OS 입장에서 abstraction을 하고 이를 포장한 형태(System call)로 User에게 제공해준다.
- System call parameter passing
- register에 값을 저장해놓고 실행 (컴퓨터 입장에서 간단)
- 메모리를 구조화하여 parameter를 넣고 passing (parameter가 많은 경우를 위해 메모리를 사용한다.)
- stack을 구상하여 parameter를 push하고 pop하여 사용
- OS 별로 system call API가 다르다.
- C에서 조건문 반복문을 제외하면 거의 다 system call이라고 볼 수 있다.
- OS가 알아들을 수 있는 System call을 이용해 compile을 한다. 그래서 다른 OS에서 컴파일된 binary file을 실행할 수 없다.
- 하지만 표준 C 라이브러리 덕분에 같은 코드를 사용해도 컴파일러가 이를 OS에 맞게 컴파일하여 코드만 같다면 다른 환경에서도 컴파일하여 실행할 수 있다.
High level 언어는 같아도 compiler와 assembler가 low level로 변역하면 OS에 맞는 언어로 바뀐다. OS에 따라 compiler도 다름 !