[34] 가상 운영체제와 가상 머신
운영체제가 프로그램이라고 말 했던 것에 주목
초기에 운영체제는 크기가 작았는데, 메모리도 더 작고 작업이 단순했기 때문
- 초창기 운영체제는 한 번에 한 개의 프로그램만 실행
- 스와핑이 제한적으로 이루어짐
- 할당할 메모리도 100KB 미만
운영체제는 단지 프로그램이므로 이론상으로는 여러분이 직접 작성할 수 있음
- 리눅스는 리누스 토르발스가 대학생 시절 유직스는 자신만에 버전으로 밑바닥 부터 새로 만듬
- 당시 초안은 10,000행이 조금 안되었음
하드웨어 개발 시 원래 의도한 것과는 다른 운영체제를 실행하기도 함
- 디스크에 몇 개의 운영체제를 저장해 두고 컴퓨터를 킬때마다 선택 가능
- 이 기능은 '멀티 부트'라 하며 애플에서도 부트 캠프라는 이름으로 윈도우 부팅을 지원함
다른 운영체제의 관리하에 다른 운영체제를 가상 운영체제(Virtual operating system)로 실행 가능
- 호스트 운영체제에서 다른 운영체제를 게스트 운영체제로 실행
- 호스트는 게스트가 생성하는 요청 중 파일 시스템 접근이나 네트워크 접근 등 운영체제 권한이 필요한 요청을 가로 챔
- 호스트는 작업에 맞게 수행 후 게스트로 돌아감
가상 운영체제에 관해 몇 가지 소유권 문제가 존재함
- 한 대의 물리적 컴퓨터로 수 많은 가상 윈도우 인스턴스를 실행하는 경우
- 마이크로 소프트는 가상 인스턴스 사본의 총 개수를 제한함(법적으로)
컴퓨터인 것처럼 작동하는 프로그램을 흔히 가상 머신(Virtual machiune)이라고 함
- 이 컴퓨터는 소프트웨어로만 존재하지만 마치 하드웨어 인 것처럼 작동 방식을 모방하는 프로그램
- 브라우저에는 자바스크립트 프로그램을 해석하기 위해 가상 머신이 있음
- 자바 프로그램용으로 별도의 가상 머신이 있기도 함
- 안드로이드 폰에도 자바 가상 머신이 존재
- 가상 머신이 사용되는 이유는 물리적 장비를 만들어서 출하하는 것보다 프로그램을 작성해서 배포하는 것이 더 쉽고 유연하기 때문
클라우딩 컴퓨팅은 가상 머신에 의존함
- 클라우드 서비스 제공 업체는 저장 공간과 네트워크 대역폭이 충분한 물리적 컴퓨터를 대량으로 보유
- 해당 자원을 통해 컴퓨팅 성능을 제공
- 고객들은 몇 개의 가상 머신을 사용하는데, 가상 머신은 그 보더 더 적은 수의 물리적 컴퓨터의 지원을 받음
- 멀티코어 프로세서가 이러한 작업에 적합함
[35] 운영체제가 일하는 법
프로세서는 컴퓨터가 커졌을 때 영구 기억 장치에 저장된 약간의 명령어로 실행해 작동을 시작하도록 구성
- 그런 다음 이 명령어로 작은 플래시 메모리에서 명령어를 읽음
- 명령어에는 디스크상의 알려진 위치, USB 메모리, 또는 네트워크 연결에서 더 많은 명령어를 읽는 코드가 포함됨
- 플래시 메모리가 읽은 명령어는 최종적으로 유용한 작업을 하기에 충분한 코드가 로드 될 때까지 더욱더 많은 명령어를 읽음
이렇게 컴퓨터가 작동을 시작하는 과정은 '자력으로 해내다'라는 'pulling oneself up by one's bootstraps'라는 표현에서 부트스트래핑(bootstrapping)이라고 불렸는데 현재는 그냥 부팅(booting)이라고 함
프로세서마다 세부 사항은 다르지만 기본 아이디어는 같음, 약간의 명령어는 더 많은 명령어를 찾기에 충분하고, 또 한층 더 많은 명령어로 이어짐
부팅 과정에는 메모리와 다른 구성 요소를 점검해서 올바르게 작동하는지 확인하는 절차가 포함됨
- 컴퓨터에 어떤 외부 장치가 연결 되어 있는지 하드웨어에 질문하기도 함
- 연결된 장치를 운영체제가 사용할 수 있도록 관련된 소프트웨어 구성 요소(드라이버)를 로드할 수 있음
운영체제는 일단 실행되면 간단한 작업 사이클을 집중적으로 수행
- 실행할 준비가 됬거나 관심이 필요한 각 애플리케이션에 차례로 통제권을 줌
- 필요에 따라 프로세스 간에 초점을 전환
- 각 프로그램은 짧은 시간조각(time slice)을 할당 받는데, 시간 조각은 프로그램이 서비스를 요청하거나 프로그램에 할당된 시간이 다 되면 끝남
운영체제는 이벤트에 반응함
- 이벤트가 발생하면 해당 사실을 이벤트를 처리해야 하는 어플리케이션에 전달함
[시스템 콜]
운영체제는 하드웨어와 다른 소프트웨어 간의 인터페이스를 제공
- 운영체제는 하드웨어가 실제보다 더 상위 레벨의 서비스를 제공하는 것처럼 보이게 함으로써 프로그래밍을 더 쉽게 할 수 있도록 함
- 운영체제는 애플리케이션이 구축 될 수 있는 플랫폼(platform)을 제공
- 이는 추상화의 또 다른 예로, 구현상 들쑥날쑥한 부분이나 관련없는 세부 사항을 감추는 인터페이스 또는 외관을 제공
운영체제는 애플리케이션에 제공하는 작업이나 서비스의 집합을 정의함
- 파일로 데이터 저장, 파일에서 데이터 가져오기
- 네트워크 연결 맺기
- 키보드로 입력 된 내용 가져오기
- 마우스 움직임과 버튼 클릭 알리기 등
운영체제는 이런한 서비스를 표준화된 방식 또는 합의된 방식으로 이용할 수 있게 함
- 애플리케이션은 운영체제의 특정 부분에 통제권을 넘겨주는 특별한 명령어를 실행함으로 서비스를 요청
- 운영체제는 요청에 포함된 어떤 일이든 처리하고, 통제권과 처리 결과를 애플리케이션 돌려줌
- 운영체제에 서비스를 요청하는 이 진입점을 시스템 콜(system call)이라고 함
- 시스템 콜의 세부 명세에서 그 운영체제가 무엇인지를 규정
- 최신 운영체제에는 보통 수백 개의 시스템 콜이 있음
[디바이스 드라이버]
운영체제와 프린터나 마우스 같은 특정 종류의 하드웨어 장치 간의 가교 역할을 하는 코드
- 드라이버 코드는 특정 장치가 어떤 일을 하도록 하는 방법을 자세히 알고 있음
디바이스 드라이버는 특정 장치의 특이한 속성에서 시스템의 나머지 부분을 분리
- 드라이버 인터페이스는 운영체제가 서로 다른 장치에 균일한 방식으로 접근하도록 해서 장치를 전환하기 쉽게 해줌
범용 운영체제에는 많은 디바이스 드라이버가 있음
- 윈도우는 소비자들이 사용할 가능성이 있는 매우 다양한 장치를 위한 드라이버를 이미 설치한 상태로 출하
- 모든 장치제조사는 새로 나왔거나 업데이트 된 드라이버를 다운로드 할 수 있도록 웹사이트를 관리함
부팅 시에는 시스템의 현재 가용 장치에 필요한 드라이버를 불러오는 작업도 이루어짐
- 장치의 수가 많을수록 시간이 더 오래 걸림
- 또한 새로운 장치가 갑자기 연결되는 경우도 흔함
[다양한 디지털 장치와 운영체제]
전자 제품이 꾸준히 작아지고 더 많은 하드웨어를 넣을 수 있게 됨
- 많은 장치의 처리 성능과 메모리 용량이 상당히 높아짐
기술 발달 덕분에 장치들은 전반적으로 범용 컴퓨터와 비슷한 모습을 띠게 됨
- 이런 추세가 계속면서 별도의 운영체제를 만들기 보다는 범용 운영체제를 사용하는 방식이 더 타당함