프로세서는 컴퓨터가 켜졌을 때 영구 기억 장치에 저장된 약간의 명령어를 실행해서 작동을 시작하도록 구성되어 있다. 그런 다음 이 명령어로 작은 플래시 메모리에서 명령어를 읽는데, 여기에는 디스크 상의 알려진 위치, USB 메모리, 또는 네트워크 연결에서 더 많은 명령어를 읽는 코드가 포함돼 있다. 그렇게 해서 플래시 메모리에서 읽은 명령어는 최종적으로
유용한 작업을 하기에 충분한 코드가 로드될 때까지 더욱더 많은 명령어를 읽는다. 이렇게 컴퓨터가 작동을 시작하는 과정은 원래 자력으로 해내다라는 오래된 표현에서 나온 부트 스트래핑이라고 불렸는데, 지금은 그냥 부팅이라고 한다. 프로세서마다 세부 사항은 다르지만 기본 아이디어는 같다. 약간의 명령어는 더 많은 명령어를 찾기에 충분하고, 또 한층 더 많은 명령어로 이어진다. 부팅 과정에는 메모리와 다른 구성 요소를 점검해서 올바르게 작동하는지 확인하는 절차가 포함된다. 또한 컴퓨터에 어떤 외부 장치가 연결되어 있는지(예를 들어 프린터나 스캐너가 있는지) 알아내고자 하드웨어에 질문하기도 한다. 연결된 장치를 운영체제가 사용할 수 있도록 관련된 소프트 웨어 구성 요소(드라이버)를 로드할 수도 있다. 이 모든 일에는 어느 정도 시간이 걸리며, 이때 우리는 컴퓨터가 뭔가 유용한 작업을 시작할 수 있는 상태가 되기를 초조하게 기다린다. 컴퓨터가 예전보다 훨씬 빨라졌지만 부팅하는 데 아직도 1~2분 정도가 걸리는 것은 불만스러운 일이다.
운영체제는 일단 실행되면 꽤 간단한 작업 사이클을 집중적으로 수행하며, 실행할 준비가 됐거나 관심이 필요한 각 애플리케이션에 차례로 통제권을 준다. 만일 워드프로세서에서 텍스트를 타이핑하거나, 메일을 확인 하거나, 이리저리 웹 서핑을 하거나, 백그라운드에서 음악을 재생하면 운영체제는 프로세서가 이 프로세스 각각에 차례로 관심을 갖고 처리하게 하고, 필요에 따라 프로세스 간에 초점을 전환한다. 각 프로그램은 짧은 시간 조각을 할당받는데, 시간 조각은 프로그램이 시스템 서비스를 요청하거나 프로그램에 할당된 시간이 다 되면 끝난다.
운영체제는 음악이 끝에 도달하거나, 메일을 받거나, 웹페이지를 다운로드하거나, 키가 눌리는 것 등의 이벤트에 반응한다. 운영체제는 각 이벤트에 대해 필요한 어떤 일이든 수행하며, 보통은 그런 이벤트가 발생했다는 사실을 해당 이벤트를 처리해야 하는 애플리케이션에 전달한다. 사용 자가 화면에 표시된 창을 재배치하기로 했다면 운영체제는 디스플레이에 각각의 창을 어디에 놓을지 알려 주고, 각 애플리케이션에는 애플리케이션 창의 어느 부분이 화면에 보여야 하는지 알려 줘서 애플리케이션이 창 을 다시 그리도록 한다. 사용자가 메뉴에서 [파일]〉[종료를 선택하거나 창의 위쪽 모서리에 있는 작은 X를 클릭해서 애플리케이션을 종료하면 운영체제는 애플리케이션에 곧 끝나야 된다고 통보해서 애플리케이션이 남은 일을 정리할 기회를 준다. 예를 들면, 사용자에게 '파일을 저장하시겠습니까?'라고 묻는 식이다. 그러고 나서 운영체제는 프로그램이 사용하던 모든 자원을 회수하고, 화면에 창이 노출될 다른 애플리케이션에 창을 다시 그려야 한다고 알려 준다.
시스템 콜
운영체제는 하드웨어와 다른 소프트웨어 간의 인터페이스를 제공한다. 운영체제는 하드웨어가 실제보다 상위 레벨의 서비스를 제공하는 것처럼 보이게 함으로써 프로그래밍을 더 쉽게 할 수 있도록 한다. 전문 용어를 사용하면 운영체제는 애플리케이션이 구축될 수 있는 플랫폼을 제공한다. 이는 추상화의 또 다른 예로, 구현상 들쑥날쑥한 부분이나 관련 없는 세부 사항을 감추는 인터페이스 또는 외관을 제공한다.
운영체제는 애플리케이션에 제공하는 작업이나 서비스의 집합을 정의 한다. 여기에는 파일로 데이터를 저장하거나 파일에서 데이터 가져오기, 네트워크 연결 맺기, 키보드로 입력된 내용 가져오기, 마우스 움직임과 버 튼 클릭 알리기, 디스플레이에 그리기가 포함된다.
운영체제는 이러한 서비스를 표준화된 방식 또는 합의된 방식으로 이용 할 수 있게 하고, 애플리케이션은 운영체제의 특정 부분에 통제권을 넘겨주는 특별한 명령어를 실행함으로써 서비스를 요청한다. 운영체제는 요청에 포함된 어떤 일이든 처리하고, 통제권과 처리 결과를 애플리케이션에 게 돌려준다. 운영체제에 서비스를 요청하는 이 진입점을 시스템 콜 system call이라고 하며, 시스템 콜의 세부 명세에서 그 운영체제가 무엇인지를 규정한다. 최신 운영체제에는 보통 수백 개의 시스템 콜이 있다.
디바이스 드라이버
운영체제와 프린터나 마우스 같은 특정 종류의 하드웨어 장치 간에 가교 역할을 하는 코드다. 드라이버 코드는 특정 장치가 어떤 일을 하도록 하는 방법을 자세히 알고 있다. 여기에는 마우스나 트랙패드에서 오는 움직임 과 버튼 정보를 이용하는 방법, 드라이브가 집적회로나 회전하는 자성 표에서 정보를 읽고 쓰게 하는 방법, 프린터가 종이에 인쇄하게 하는 방 내 특정 무선 칩이 전파 신호를 보내고 받게 하는 방법 등이 포함된다.
디바이스 드라이버는 특정 장치의 특이한 속성에서 시스템의 나머지 부분을 분리한다. 예를 들어, 키보드처럼 종류는 다양하지만 동일한 역할을 하는 장치에는 운영체제가 필요로 하는 기본 속성과 동작이 있는데, 드라이버 인터페이스는 운영체제가 서로 다른 장치에 균일한 방식으로 접근하도록 해서 장치를 전환하기 쉽게 해 준다.
프린터를 생각해 보자. 운영체제는 일반적인 요청을 하고 싶어 한다. 가령 어떤 텍스트를 페이지의 어떤 위치에 출력하고, 어떤 이미지를 그리고, 다음 페이지로 넘어가고, 어떤 기능을 지원하는지 설명하고, 상태를 알리는 등의 작업을 어떤 프린터에든 균일한 방식으로 요청한다. 하지만 프린터마다 지원하는 기능에 차이가 있다. 예를 들어 컬러 인쇄, 양면 인쇄, 다 양한 종이 크기 등의 지원 여부가 다르고, 인쇄할 정보를 종이로 옮기는 메커니즘도 다르다. 특정 프린터용 드라이버는 운영체제의 요청을 해당 프린터가 그 일을 수행하는 데 적합한 형태로 변환한다. 예를 들어, 흑백 인쇄만 지원하는 프린터라면 컬러를 그레이스케일로 변환해야 한다. 실제로는 운영체제가 추상적이거나 이상화된 장치에 포괄적인 요청을 하고, 드라이버가 특정 장치에 맞게 요청을 구체적으로 구현한다. 컴퓨터에 여러 대의 프린터를 연결해서 사용해 보면 이 메커니즘을 확인할 수 있는데, 인쇄 대화 상자에서 다양한 프린터에 대해 서로 다른 옵션을 제공하는 것을 볼 수 있다.
범용 운영체제에는 많은 디바이스 드라이버가 있다. 예를 들면 윈도우는 소비자들이 사용할 가능성이 있는 매우 다양한 장치를 위한 드라이버를 이미 설치한 상태로 출하하고, 모든 장치 제조사는 새로 나왔거나 업데이트된 드라이버를 다운로드할 수 있도록 웹사이트를 관리한다. | 부팅 시에는 시스템에 현재 가용 장치에 필요한 드라이버를 불러오는 작업도 이루어진다. 장치의 수가 많을수록 시간이 더 오래 걸린다. 또한 새로운 장치가 갑자기 연결되는 일도 흔하다. 외부 디스크가 USB 소켓에 연결되면 운영체제는 새 장치를 인식하고 그게 디스크라는 것을 알아내 며, 이후에 디스크와 통신하도록 USB 디스크의 드라이버를 로드한다. 보통은 새로운 드라이버를 찾을 필요가 없다. 이 메커니즘은 너무나 표준화되어 있어서 운영체제는 이미 필요한 것을 갖추고 있고, 장치를 구동하기 위한 세부 사항은 장치 내부의 프로세서에 내장되어 있기 때문이다.
다양한 디지털 장치와 운영체제
전자 부품이 꾸준히 저렴해지고 작아지면서 장치 하나에 더 많은 하드웨 어를 넣을 수 있게 됐다. 그 결과, 많은 장치의 처리 성능과 메모리 용량이 상당히 높아졌다. 디지털카메라를 '렌즈가 달린 컴퓨터'라고 부르는 것도 터무니없는 표현은 아니다. 처리 성능과 메모리 용량이 높아지면서 카메 라는 예전보다 훨씬 더 많은 기능을 갖추게 됐다. 내가 쓰는 중저가 콤팩 E 카메라로도 고화질 비디오를 녹화하고, 와이파이를 통해 컴퓨터나 휴 대전화로 사진을 전송한다. 휴대전화 자체도 좋은 사례다. 모두 알다시피 카메라와 휴대전화는 하나로 합쳐지고 있다. 렌즈 품질에 따라 다르겠지 만 요즘 출시되는 휴대전화는 전부 내 첫 번째 디지털카메라보다 훨씬 높은 화소를 지원한다. | 기술 발달 덕분에 장치들은 전반적으로 앞에서 살펴봤던 범용 컴퓨터와 비슷한 모습을 띠고 있다. 성능이 좋은 프로세서와 용량이 큰 메모리가 내장되어 있고, 카메라 렌즈와 디스플레이 같은 주변 장치가 여러 개 달려 있다. 정교한 사용자 인터페이스 user interface를 제공하기도 하고, 흔히 다른 시스템과 통신할 수 있도록 네트워크 연결도 가능하다. 휴대전화는 이동 통신망과 와이파이를 사용하는 반면, 게임 컨트롤러는 적외선 통신과 블루투스를 사용한다. 임시로 가끔 연결하는 장치는 USB를 이용한다. 사물 인터넷도 동일하다. 온도 조절 장치, 조명, 보안 시스템 등은 내장된 컴퓨 터에 의해 제어되고, 인터넷에 연결되어 있다.
이런 추세가 계속되면서 별도의 운영체제를 만들기보다는 범용 운영체 제를 사용하는 방식이 더 타당하다. 사용 환경이 특수한 경우가 아니라면 자신만의 전용 시스템을 개발하거나 값비싼 상용 제품의 라이선스를 얻는 것보다는 리눅스에서 불필요한 부분을 뺀 버전을 사용하는 편이 더 쉽고, 저렴하다. 리눅스는 견고하고, 개조하기 용이하고, 이식 가능하고, 무료이
기 때이다. 단점은 GPL 같은 라이선스에 따라 결과물 코드 일부를 공개가 될 수도 있다는 점이다. 이 측면은 장치에 포함된 지적 재산권의 보호에 관한 논쟁을 불러일으킬 수 있지만, 킨들과 티보를 비롯한 많은 장치의 사례를 보면 적절히 대처할 수 있는 것으로 보인다.
'IT 지식' 카테고리의 다른 글
파일을 휴지통에 넣을 때 일어나는 일 (0) | 2022.08.31 |
---|---|
파일 시스템과 블록 (0) | 2022.08.31 |
가상 운영체제와 가상 머신 (0) | 2022.08.23 |
컴퓨터를 작동하게 만드는 운영체제 (1) | 2022.08.23 |
기술 표준의 중요성과 자유로운 소프트웨어 오픈소스 (0) | 2022.08.21 |