보이진 않지만 거대한 프로그램 운영 체제
애플리케이션을 도와주는 프로그램, 운영 체제(Operating System)
애플리케이션 뒤에서 도움을 주는 눈에 보이지 않는 프로그램이 있는데, 이게 바로 운영체제 OS 이다.
사실 우리는 운영 체제를 매일 쓰고 있다.
모든 컴퓨터나 핸드폰에 설치되어 있기도 하고, 이런 운영 체제 도움을 받아야지만
컴퓨터의 여러 장치들과 함께 애플리케이션이 잘 동작할 수 있다.
컴퓨터나 휴대폰의 전원을 켜면 자동으로 실행되기 때문에 우리가 직접 사용한다는 느낌이 덜 들긴 하지만
컴퓨터나 휴대폰은 매일 사용한다면 운영 체제를 매일 사용하고 있다는 것이다.
운영 체제는 어떤 역할을 하기에 모든 컴퓨터에 운영 체제가 필요한 것일까?
컴퓨터를 켜자마자 컴퓨터는 왜 운영 체제 부터 실행시키는 것일까?
운영 체제의 역할1 : 입력과 출력관리
운영 체제가 하는 첫 번째 역할은 입력과 출력 관리 이다.
사실 사용자 입장에서 보면 컴퓨터는 오로지 입력 장치와 출력 장치로만 이루어져 있다.
입력과 출력이 컴퓨터에 있어서 그만큼 중요하다는 것이다.
이건 그냥 장치선을 연결했다고만 해서 되는 것이 아니다.
그 이면에서 운영 체제가 매끄럽게 연결 시켜주기 때문에 가능한 것이다.
수 많은 입력장치와 출력장치가 있고,
사람들이 장치를 연결해서 사용하는 것을 생각해 보면 경우의 수가 끝도 없다.
연결된 장치들까지 이 전체를 하나의 컴퓨터라고 본다면 세상에 똑같은 컴퓨터는 없다고 봐도 과언이 아니다.
이렇게 다양한 장치를 조합해서 사용하는데도 컴퓨터에 연결하면 대부분 문제없이 동일하게 동작한다.
입출력장치와 애플리케이션을 운영 체제가 연결해 주기 때문에 애플리케이션은 안정적으로 하드웨어를 사용할 수 있는 것이다.
그러면 애플리케이션을 만드는 사람은 애플리케이션 본연의 기능에만 더 집중해서 만들 수 있는 것이다.
프로그래밍 세계에서는 이런 분업과 효울을 늘 추구한다.
컴퓨터의 사용 방식을 전체적으로 그림으로 정리해보면
사람이 애플리케이션 프로그램을 사람이 직접 사용하기까지 그 사이 단계에서 운영 체제가 중요한 역할을 한다.
운영 체제의 역할2 : 저장과 불러오기
운영 체제의 중요한 두 번째 역할은 저장과 불러오기 이다.
컴퓨터가 가장 많이 하는 일 중 하나는 저장일 것이다.
이렇게 무언가를 저장하고 다시 불러와서 사용하고 이런 작업을 컴퓨터는 계속 반복한다.
컴퓨터에는 여러 종류의 저장 장치가 있다.
컴퓨터에는 두 가지 타입의 저장이 있는데
컴퓨터가 켜져 있는 동안만 저장되는 정보인 휘발성 정보와
컴퓨터가 꺼져도 저장되는 정보인 비휘발성 정보 이다.
그리고 운영 체제가 이걸 결정해서 각 저장 장치에 분배해 주는 것이다.
근데 왜 휘발성 정보가 필요한 것일까?
저장 용량은 제한적이다.
저장 공간이 많이 필요할 수록 돈이 많이 들기 때문에 모든 정보를 다 저장해 놓을 순 없다.
이런 이유로 컴퓨터가 켜져 있는 동안에만 보관해야 될 정보와
그 이후에도 보관해야 될 정보를 구분해서 저장하는 것이다.
휘발성/ 비휘발성 말고도 저장 장치 사이에 차이점이 있다.
바로 읽고 쓰는 속도가 다른 것이다.
프로그램을 실행 하다보면 반드시 빠르게 읽어와야 하는 정보도 있고 조금 느려도 괜찮은 정보도 있다.
무조건 빠른 게 좋은것 아닌가 싶지만 문제는 빠른 저장 장치는 그만큼 비싸다는 것이다. ( 아혀 자본주의...)
그래서 컴퓨터에 보면 빠른 저장 장치는 작은 용량으로 되어있고
느린 장치는 큰 용량으로 되어 있다.
그리고 컴퓨터는 각 상황에서 빠른 저장 장치를 써야 하는지, 느린 저장 장치를 써야 하는지 계속 판단해야 한다.
이 판단을 운영 체제가 해준다.
그리고 또다른 차이가 있다.
삭제나 수정이 가능한 정보들이 있고 아예 삭제나 수정을 하면 안되는 정보들도 있다.
수정이 불가한 정보들은 컴퓨터를 쓰기 위해 존재하는 기본적인 세팅 같은 것들인데
이런 것들이 저장되어 있는 것을 Read-Only Memory 줄여서 ROM 이라고 한다.
이렇게 보니 여러 종류의 저장 장치가 있다는 것을 알 수 있다.
이 다양한 특징의 여러 저장 장치들이 컴퓨터 안에 자리하고 있다.
다양한 저장 공간들을 활용해서 각 상황과 목적에 맞게 비싼 저장 공간은 조금만 쓰면서도 속도는 전체적으로 빠르도록 여러방식으로 저장과 불러오기를 해야 한다.
이런 복합적인 판단과 운영을 OS가 해준다.
운영 체제의 역할3 : 여러 프로그램들을 동시에 빠르게 실행 하기
우리는 많은 애플리케이션을 동시에 사용한다.
그런데 이렇게 여러 애플리케이션이 동시에 실행되다 보면 뭔가 문제가 생길 수 있다.
여러 프로그램들이 이걸 해달라 저거 해달라 요청을 보낸다.
그러면 저장 장치 입장에선 혼란이 생길 수 있다.
예를 들어 영화 2개를 다운받는다 가정시 다운로드라는 건 내 컴퓨터의 저장 공간에 가져온다는 것인데
이렇게 영화가 다운받아 지면서 저장 공간에 새로운 내용이 생긴다.
그런데 점점 다운로드를 받다가 이 공간이 겹칠수도, 이미 저장되어 있던 다른 내용을 침범할 수도 있다.
그래서 이 애플리케이션들 사이에서 조율을 해주는 역할이 필요하다.
이 역할을 하는 것이 OS 이다.
여러 프로그램들이 동시 실행되는 것을 멀티태스킹 이라고 한다.
중간중간에 사람이 못 느낄 정도로 일들을 잘게 쪼갠 뒤에 각 장치들이 효율적으로 일할 수 있도록
역할 분담, 일하는 순서와 분량 같은 것을 다 정해준다.
이런 역할도 운영 체제가 맡아서 해준다.
애플리케이션이 잘 실행될 수 있도록 운영 체제가 여러 역할을 하고 있다.
운영 체제의 종류
운영 체제는 모든 컴퓨터에 반드시 필요한 부분이라는 것을 알았다.
그렇다면 운영 체제 로는 어떤 것들이 있을까?
운영 체제 마다 저마다의 특징이 있는데 예를 들어 Windows, Android 는 사용자가 설정 같은 걸 더 쉽게 바꿀 수 있다.
내 설정을 바꿀 수 있다는 말은 외부 프로그램들도 내 컴퓨터의 설정을 바꿀 수 있다는 것인데
그 때문에 편리하지만 바이러스에 더 취약하다.
반면 macOS, iOS 는 보안이 철저해서 환경 설정의 선택지가 제한되어 있다.
운영 체제는 용도에 따라서 크게 4종류로 나눌 수 있다.
데스크톱과 랩톱, 모바일, 서버와 임베디드 이다.
먼저 데스크톱과 랩톱에서 쓰이는 운영 체제는
우리가 흔히 접하는 컴퓨터 혹은 노트북에서 사용되는데
Windows의 여러 시리즈들 macOS, Linux 같은 것들이 있다.
사용하는 점유율을 살펴보면 Windows가 압도적이다.
모바일 운영 체제를 살펴보면
모바일이라고 하면 원래 스마트폰에서 주로 사용되었지만
요즘엔 태블릿이나 스마트워치 같은 다른 기기들에도 모바일 운영 체제가 적용되고 있다.
모바일 운영 체제는 각 기기의 생김새는 다르지만 사용자들이 쓸 때는 비슷한 느낌으로 쓸 수 있도록 지원을 많이 해준다.
최근에는 안드로이드를 많이 사용한다.
서버는 회사에서 큰 데이터를 관리하거나 웹사이트를 운영한다든지 이런 목적으로 사용하는 컴퓨터 이다.
예를 들어 우리가 구글 드라이브나 블로그에 파일을 저장하면 그 파일은 회사의 서버 컴퓨터에 저장이 된다.
서버는 안전성이나 속도, 효율 같은 것들이 더 중요한 컴퓨터 이다.
서버 운영 체제는 이런 용도에 더 맞춰져 있다.
임베디드 운영 체제는 일반 컴퓨터가 아닌 다른 기계들에 들어가는 거라고 생각하면 된다.
예를 들어 ATM, 키오스크, 자동차, TV 등등 이런 것들에 들어가는 운영 체제 이다.
임베디드는 워낙 종류가 많고 환경이 방대하기 때문에 운영 체제도 매우 다양한 종류가 사용된다.
그 중에서도 실시간 운영 체제 (Real-time operating system, RTOS) 부류의 운영 체제들이 많이 사용된다.
실시간 운영 체제라는 건 무조건 빠르게 동작하기 보다
정해진 시간 안에 확실히 끝내는 걸 보장하는 용도의 운영 체제를 말한다.
임베디드 분야에서는 무조건 빠른 것보다 정해진 시간 이내에 안정적으로 동작하는 게 더 중요할 수 있다.
운영 체제의 발전 역사
용도나 특징에 따라 다양한 운영 체제가 존재 한다.
사실 모든 운영 체제는 사실상 하나의 뿌리를 갖고 있다.
그것이 바로 유닉스(UNIX) 이다.
많은 운영 체제들이 유닉스라는 하나의 운영 체제에서 출발되었다.
유닉스라는 운영 체제가 이렇게 다양하게 발전해서 지금 운영 체제 상당수를 형성하게 되었다.
C언어로 만들어진 유닉스는 다른 컴퓨터에 수정해서 적용하기 쉬운 특징이 있었다.
그래서 운영 체제로써 인기를 끌게 되었고 덩달아 UNIX를 변경할 수 있는 C언어도 인기를 얻게 되었다.
유닉스가 워낙 인기를 끌자 다양한 모방 버전의 운영 체제들이 등장했고,
이를 표준화하기 위해서 POSIX 라는 표준이 등장했다.
POSIX에는 유닉스라면 갖춰야될 규격과 기능에 대한 내용이 정해져 있었고,
이걸 모두 만족하면 유닉스의 공식 버전으로 인증 받을 수 있었다.
자유 소프트웨어 재단 이라는 곳에서 모두가 자유롭게 사용하고 변형하고 공개할 수 있는 유닉스를 닮은 운영 체제를 만드는 프로젝트 GNU 를 시작했다.
GNU는 GNU is Not Unix 의미의 약자 이다.
그래서 유닉스의 인증기준인 POSIX를 다 만족하고 유닉스처럼 생기긴 했는데
엄밀히 따지자면 유닉스 공식 인증을 받지는 않았기 때문에 유사 유닉스, Unix-like 라는 것이다.
리눅스는 가장 많은 사람들이 들어간 공개 프로젝트 이며 git(코드 관리 시스템)을 사용하여 리눅스를 만드는데 참여했다.
리눅스를 기반으로 만든 체제는 변형할 때도 아무런 제약 없이 변형 가능하다.
다만 리눅스를 기반으로 만든 운영 체제는 반드시 코드를 공개해야 하는 의무가 있다.
'컴퓨터 개론' 카테고리의 다른 글
Codeit_컴퓨터개론을 완강하고 ;) (0) | 2021.06.28 |
---|---|
Codeit_네이티브 애플리케이션과 웹 애플리케이션 (0) | 2021.06.23 |
Codeit_컴파일러와 인터프리터 (0) | 2021.06.21 |
Codeit_트렌드를 읽는 능력 (0) | 2021.06.21 |
Codeit_개발자의 필수 프로그램 IDE (0) | 2021.06.21 |