운영체제 개요
운영체제의 시작
운영체제는 본래 미사일의 탄도를 계산하기 위해 개발되었다.
계산을 위해 개발 되었지만 성능을 개선시키기 위해선 새롭게 제작해야하는 기계와 달리
소프트웨어나 하드웨어의 확장/변경을 통해 성능을 개선시킬 수 있고
특히 프로그래밍이 가능 하기 때문에 컴퓨터라고 불린다.
운영체제란
컴퓨터는 크게 하드웨와 소프트웨어로 구성된다.
하드웨어란 컴퓨터 시스템이 작동하는데 필요한 물리적 구성 요소이다.
소프트웨어란 하드웨어를 제어하여 원하는 작업을 수행시키는 명령어의 모음이다.
소프트웨어는 응용 소프트웨어와 시스템 소프트웨어로 나눌 수 있다.
응용 소프트웨어는 특정 작업을 위해 사용하는 프로그램이다.
시스템 소프트웨어는 컴퓨터 하드웨어와 응용 소프트웨어를 관리하기 위한 소프트웨어로
운영체제와 유틸리가 있다.
만약 응용 소프트웨어가 cpu, ram, disk와 같은 컴퓨터 자원을 직접 접근해 사용한다고 가정하면 서로 동시에 사용해 충돌이 일어나거나 정보 유출 및 유실이 아주 빈번하게 일어날 것이다.
이러한 문제를 해결하기 위해 컴퓨터 접근을 제한하고 컴퓨터 전체를 관리하는 소프트웨어가 운영체제이다.
운영체제는 컴퓨터를 관리하기 위한 기본적인 규칙과 절차를 규정하여 하드웨어와 소프트웨어를 관리한다.
운영체제를 간단히 정의하면 컴퓨터 자원을 효율적으로 관리하는 소프트웨어이다.
운영체제 구성 요소
커널
커널은 운영체제의 핵심적인 기능을 모아놓은 것이다(Data를 읽고 쓰고 수정하고 삭제하고 CRUD).
사용자나 응용프로그램이 컴퓨터 자원에 접근하기 위해선 무조건적으로 커널을 통해서만 가능하다.
- 프로세스 관리: 프로세스에 cpu를 배분하고 작업 환경을 만드는 것이다.
- 메모리 관리: 프로세스 작업 공간을 배치하고 가상 메모리를 제공한다
- 파일 시스템 관리: 데이터를 Read/Write 한다
- 입출력 관리: 주변장치로 부터 발생하는 다양한 입출력을 관리한다
- 프로세스 간 통신: 프로세스 간의 통신을 중개한다.
시스템 콜
시스템 콜은 커널이 안정적으로 운영하기 위해 만든 인터페이스이다.
응용소프트웨어는 api를 호출하고 api는 시스템콜을 호출한다.
시스템콜은 지정번호를 갖고 있으며 해당하는 번호의 함수를 가져다 사용한다.
장치 드라이버
장치 드라이버는 하드웨어와 커널간의 통신을 중개하고 하드웨어의 동작을 제어한다.
인터페이스
인터페이스는 사용자나 응용프로그램이 컴퓨터 자원에 접근해 사용할 수 있도록 하게 해주고 그 결과를 알려주는 장치를 인터페이스라고 한다.
예를들어 마우스(인터페이스) 로 입력을 넣으면 특정 결과를 모니터(인터페이스)를 통해 나타낸다.
운영체제의 역할과 목표
효율성
운영체제는 적은 자원을 사용하여 더 빠른 작업을 처리해 효율적으로 컴퓨터를 관리해야한다.
운영체제는 프로그램에게 적당한 순서로 자원을 배분하고 적절한 시점에 자원을 회수한다.
안정성
운영체제는 하드웨어와 소프트웨어를 안정적으로 유지해아하고 컴퓨터자원을 안전하게 관리해야하며 문제가 발생하였을 때 결함 포용(back-up) 기능을 수행해야한다.
확장성
운영체제는 다양한 시스템 자원을 추가하거나 제거하기 편리해야한다.
여러가지 소프트웨어나 하드웨어를 종류에 상관없이 확장 가능해야한다.
하드웨어나 소프트웨어의 방식이 조금 달라진다고 해서 운영체제가 그에 상응하는 개발을 또 해야한다면 정말 불편할 것이다.
따라서 소프트웨어와 하드웨어에대한 인터페이스를 잘 제공해야한다.
편리성
실제로 컴퓨터를 사용하는 사용자가 편리하게 작업할 수 있는 환경을 제공해야한다.
효율성을 높이기 위해서 사용자에게 제약알 가하게 되면 효율성은 높아질 수 있으나 사용자는 불편해서 컴퓨터를 사용하지 않을 것이다.(cli가 이쁜 gui로 바뀌게 된 이유)
운영체제는 적절한 편리성과 적절한 효율성을 잘 고려해야한다.
운영체제의 발전
초창기 컴퓨터
진공관을 이용하여 진공관이 켜지면 1 꺼지면 0인 2진법을 사용한 최초의 컴퓨터이다.
18000개가량의 진공관을 연결하는 하드와이어링 방식 사용한다.
하드와이어링은 전선으로 논리회로를 구성하여 원하는 결과를 얻는 방식이다.
새로운 계산을 위해서는 새로운 논리회로를 구성해야한다.
일괄 작업 시스템
IC칩은 진공관과 전선으로 만들어지는 논리회로를 아주 작은 크기로 구현한 것이다.
입출력 장치로는 천공카드 리더와 라인 프린터가 존재했는데
초창기 컴퓨터와는 달리 천공카드만 수정하면 새로운 프로그래밍이 가능했다.
일괄 작업 시스템은 천공카드를 하나의 작업으로 읽어 중간에 상호작용 없이 한번에 결과를 출력했다.
즉 일괄 작업 시스템은 모든 작업을 한꺼번에 처리하는 시스템이다.
대화형 시스템
대화형 시스템은 매우 비효율적이던 일괄 작업 시스템을 획기적으로 바꾸어 놓았다.
한번 입력을 하면 결과가 나오기 전까지 데이터를 추가 수정 하지 못하고 오류 조차 확인할 수 없던 일괄 시스템과 달리
대화형 시스템은 작업 중간 중간마다 사용자가 입력을 하거나 중간 결과 값을 확인할 수 있게 해주었다.
즉 하나의 프로그램을 돌리더라도 여러 확장지가 생기게 된 것뿐만 아니라 중간 중간 확인함으로서 프로그램이 의도한대로 잘 실행되고 있는지 확인할 수 있다. 대화형 시스템은 사용자가 언제 입력을 할지 또 프로그램이 언제 출력을 할지 예상할 수 가 없다.
다중 프로그래밍 시스템
다중 프로그래밍 시스템은 CPU 이용률 획기적으로 높였다.
대화형 시스템은 입출력의 대기시간을 정확히 알 수 없다. 따라서 입출력 대기시간 동안 cpu는 유휴상태에 빠지게 된다. 이러한 문제를 다중 프로그래밍 시스템은 입출력 대기시간에 인터럽트를 발생시켜 다른 프로세스에게 cpu를 점유시킨다. cpu는 스케줄링을 통해 우선순위에 따라 점유된다.
시분할 시스템
시분할 시스템은 cpu를 더 효율적으로 사용하고 빠른 응답시간을 제공한다.
시분할 시스템은 하나의 cpu를 매우 짧은 시간(타임 슬라이스)로 쪼개서 프로세스들에게 제공한다.
타임 슬라이스는 매우 짧아 사용자들은 cpu가 프로세스를 동시에 처리한다고 착각할 수 있다.
또한 짧은 시간내에 동일 프로세스를 반복해서 처리하므로 응답시간도 굉장히 빨라졌다.
시분할 시스템은 프로세스를 메모리에 올려 cpu가 계속 변경해서 사용한다.
따라서 메모리 관리와 cpu의 프로세스 변경에 다른 비용이 있다. 또한 프로세스가 언제 끝날지 확실하게 알 수 없다.
다중 사용자 시스템도 시분할 시스템을 이용한다.
실시간 시스템
실시간 시스템은 프로세스가 특정 시간안에 작업이 처리되도록 보장하는 시스템이다.
경성 실시간 시스템은 지정한 응답시간을 정확히 지키는 시스템으로 미사일 요격이나 원자력 발전소에 사용된다. (응답시간안에 처리되지 않으면 치명적인 문제가 발생함)
연성 실시간 시스템은 지정한 응답시간을 최대한 지키돼 융통성있게 처리를 미루는 시스템이다. (응답시간안에 처리되지 않아도 치명적인 문제가 발생하지 않음)
분산 시스템
분산 시스템은 무거운 작업을 위해 존재하던 메인프레임이라는 고가의 대형 컴퓨터를 여러 값싼 작은 컴퓨터들을 묶어 대체한 시스템이다. 분산 시스템은 네트워크상에 분산된 여러 컴퓨터로 작업을 처리하고 그 값을 상호 교환한다. 분산 시스템의 컴퓨터들은 서로 지위가 동등하다.
클라이언트/서버 시스템
클라이언트/서버 시스템은 컴퓨터의 지위를 요청하는 컴퓨터(클라이언트)와 요청을 받아 처리하는(서버) 컴퓨터로 나눈 시스템이다.
P2P 시스템
p2p 시스템은 모든 요청에 대한 처리를 서버에서 하는 클라이언트/서버 시스템과 달리
무거운 작업일 경우 각 peer들이 서버과 클라이언트 역할을 하여 요청과 처리를 가능하게 한 시스템이다.
클라우드 컴퓨팅
하드웨어와 소프트웨어를 클라우드라 불리는 중앙 시스템에 숨기고 사용자가 필요한 서비스를 그때 그때 이용하는 방식의 컴퓨팅 환경을 클라우드 컴퓨팅이라한다.