초창기(~1980년대)의 운영체제는 스와핑도 제한적이었고, 할당메모리도 100kb미만으로
지금의 프로그램당 메모리 단위가 mb, gb인것에 비하면 현저히 작았다.
(지금은 초창기 운영체제에 비해 다양하고 복잡한 일을 처리하기 때문이다)
초창기 운영체제인 유닉스 운영체제 6판과 오늘 리눅스
유닉스 운영체제 6판: 작성자 2명, C와 어셈블리언어 9000행으로 구성
현재의 리눅스: 수 천명의 작업자와 1천만 행이 훨씬 넘는 구성
운영체제는 단지 프로그램이기 때문에 직접 작성하는 것이 가능하다. 리눅스도 대학생이었던
리누스 토르발스에 의해 탄생했다.
가상운영체제 :
다른 운영체제 관리하에 가상으로 운영체제를 실행할 수 있다
VirtualBox 및 VMware등의 가상운영체제 프로그램은 거의 모든 운영체제를 지원한다
**법적으로는 가상 인스턴스 사본의 총 개수를 제한하고 있다
호스트 운영체제 입장에서는 게스트 운영 체제도 보통의 어플리케이션이다
가상 머신(컴퓨터인척하는 프로그램) :
물리적 컴퓨터에서 실행되지만 물리적 컴퓨터처럼 작동한다.
가성 머신 내의 소프트웨어는 호스트 컴퓨터를 변조할 수 없기 때문에 바이러스에 감염된 데이터에
액세스하거나 운영체제를 테스트 하는 등 호스트 환경에서 수행하기
위험한 작업을 수행하기 위해서 필요하다. 그외 서버 가상화 등에서도 사용되는데 클라우드 컴퓨팅으로 가상 머신내 서버 가상화의 예를 들 수 있다
대표적인 클라우드 컴퓨팅 제공업체는 aws이고 영업이익의 절반을 차지한다고 한다
많은회사가 규모의 경제 작업량 변화에 대한 높은 적응성, 내부 직원의 필요성 감소덕분에 자체 서버보다 가상 서버가 더 효율적이라고 여기고 있다
부팅: 전원이 공급된 순간 각 장치를 검사하고 초기화하는 과정을 거쳐 컴퓨터가 작업할 수 있는 환경이 될 때 까지의 과정을 부팅이라고 한다
운영체제는 실행되면 사이클을 실행하는데 책(1일 1로그 100일완성
it 지식 - 2부 35쳅터)에서 말한 간단한 사이클은 인출사이클부분을 이야기하는것같다
위의 과정으로 필요에 따라 각 프로세서에 차례대로 관심을 갖고 처리하며, 프로세서간 초점을 전환한다. 운영체제는 어떤 이벤트가 발생하면 해당 이벤트를 처리해야하는 애플리케이션에 전달한다.
그리고 애플리케이션이 일할 기회를 얻어주기도 한다 예를들어 파일을 종료할때 사용자에게
'파일을 저장하시겠습니까'라고 물어 남은일을 정리할 기회를 주는 것을 예로 들수있다.
CPU의 두가지 모드 :
운영체제를 보호하기 위해 CPU에는 유저모드와 커널모드의 두가지 모드가 있다
악의적 프로그램들의 직접적 접근을 막기위함으로 만약 어떤 나쁜 프로그램이 운영체제를 거치지 않고 하드웨어를 직접적으로 실행하게 한다면 CPU는 이를 판단해 실행하지 않는다.
위의 두 모드를 간단히 말하면
유저 모드: 어플리케이션이 수행되는 모드(모니터 모드라고도 이야기한다)
커널 모드: 이터럽트 또는 트랩이 발생해서 운영체제가 호출돼 수행되는 모드
(트랩이 걸리는 경우: 사용자 모드에서 특권명령 실행 시도, 프로그램이 사용자 영역의 메모리
공간이 아닌 곳의 접근을 시도할 때)
이 때 프로그램이 필요한 자료를 찾기위해 직접 엑세스 하는것이 아니라 운영체제에 요청을 하는
인터페이스를 시스템콜 이라고 합니다
디바이스 드라이버 :
책(1일 1로그 100일완성 it 지식 - 2부 35쳅터)에서는 디바이스 드라이버를 "특정 종류의 하드웨어 장치 간에 가교역할을 하는 코드" 라고 정의 했다
이를 쉽게 풀면 우리가 쓰는 키보드, 마우스 등 입출력 장치과 운영체제가 서로 소통할 수 있게 통역하는 역할을 하는 코드 정도로 이해할 수 잇을것이다.
어떠한 새로운 장치를 연결해 사용할 때 컴퓨터는 이게 마우스인지 키보드인지 어떻게 작동하는 장치인지 알 수 없다 그래서 컴퓨터가 이 장치를 동작시킬 때 어떻게 동작되어야 하는지에 대한 프로그램을 따로 설치하게 되는데 이 것이 디바이스 드라이버이다.
운영체제가 추상적이거나 이상화된 장치에 포괄적인 요청을하고, 드라이버가 특정 장치에 맞게 요청을 구체적으로 구현한다.
*범용 운영체제에는 많은 디바이스 드라이버가 있고 예를 들어 윈도우는 소비자들이 사용할만한 장치의 드라이버를 이미 설치한 상태로 출하한다
기술의 발달덕분에 장치들은 전반적으로 성능 좋은 프로세서 용량이 큰 메모리 다양한 주변장치 등
범용 컴퓨터와 비슷한 모습을 띠고 있다.
이런 추세가 계속되면서 별도의 운영체제를 만들기보다는
범용 운영체제를 사용하는 방식이 더 타당하다라고 저자는 말하고 있다
단점은 PL같은 라이선스에 따라 결과물 코드 일부를 공해 해야 될 수도 있다는 점인데
킨들과 티보의 사례로 적절히 대처할 수 있을 것
** TiVo의 경우: GPL의 요구사항을 준수해 다른 사람이 수정할 수 있도록 소스 코드를 공개하였지만 수정된 소프트웨어는 TiVo의 하드웨어에서 실행되지 않습니다
** 킨들의 영우: 킨들의 코드공유