운영체제(Operating System)는 사용자가 컴퓨터를 사용하기 위해 필요한 소프트웨어이다. 우리가 일반적으로 컴퓨터를 사용하면서 실행한 모든 프로그램들은 운영체제에서 관리하고 제어한다.
유닉스 : 많은 운영체제의 조상격
리눅스 : 오픈소스 운영체제로 수많은 리눅스 기여자가 있음. 많은 기업에서 사용되고 있음
디스크에 몇 개의 운영체제를 저장해두고 부팅시 선택해서 실행할 수 있음.
애플에서도 부트캠프라는 이름으로 지원됨
VM웨어, 버추얼박스, 젠 등이 있음. 호스트 운영체제에서 다른 운영체제를 게스트로 실행할 수 있음.
호스트가 게스트의 요청 중 운영체제 권한이 필요한 요청을 가로채서 작업을 수행해주는 식.
소프트웨어로만 존재하지만 마치 하드웨어인 것 처럼 작동 방식을 모방함.
클라우드 컴퓨팅이 대표적. 고객들에게 멀티코어 프로세서로 가상 머신을 제공해줌
EX) 아마존 웹 서비스 : 개별 사용자가 사용규모를 즉각 확대하거나 축소 가능. 자체 서버를 운영하는 것보다 효율적
컴퓨터가 켜졌을 때 영구 기억 장치에 저장된 명령어로 작동을 시작함. 이 명령어는 작은 플래시 메모리에서 명령어를 읽고, 위치,USB메모리, 네트워크 연결에서 더 많은 명령어를 읽어 최종적으로 유용한 작업을 하기에 충분한 코드가 로드될 때 까지 더욱 더 많은 명령어를 읽음. 이 과정을 부팅이라고 한다. 이 과정에는 메모리와 다른 구성 요소를 점검해서 올바르게 작동하는지 확인하고 드라이버 등을 로드한다.
운영체제에서 작동하는 애플리케이션은 특정 부분에 통제권을 넘겨주며 서비스를 요청한다.(클릭이벤트, 파일가져오기 등).
이렇게 운영체제에 서비스를 요청하는 진입점을 시스템 콜이라고 한다.
운영체제와 프린터나 마우스같은 특정 종류의 하드웨어 장치 간에 가교 역할을 하는 코드.
이 코드는 해당 장치가 어떤 일을 하도록 하는 방법을 자세히 알고 있음.
운영체제의 포괄적인 요청을 특정 장치에 맞게 요청을 구체적으로 구현함
전자부품의 발달로 장치 하나에 많은 하드웨어를 넣을 수 있게 되었다.
많은 장치의 처리성능과 메모리 용량이 높아짐에 따라 다양한 기능들을 갖추게 된 장치들은 범용 컴퓨터와 비슷한 모습을 띠고 있다.
이런 추세로 각 장치에 맞는 운영체제를 별도로 만들기 보단 범용 운영체제를 사용하는 방식이 타당함.
단점은 라이선스에 따라 결과물 코드를 일부 공개하게 될 수 있음.