자료 출처 : KOCW 운영체제 - 반효경 교수님
1. Introduction
1) 운영체제란?
짧게 말하면, 운영체제는 하드웨어 위에 바로 올라가는 소프트웨어이다.
소프트웨어와 하드웨어를 연결하는 소프트웨어 계층
좁은의미 - 커널
넓은 의미
2) 목적?
내가 맘대로 쓴 개요를 안보고 왔다면 보고 오자! 더 이해가 잘 될 수도??
컴퓨터 시스템의 자원
(프로세서, 기억장치, 입출력 장치, 프로세스, 파일, 메시지 등등)을 효율적으로 관리
- 초당 instruction을 몇 개 수행할 수 있는 cpu, 특정 크기의 ram등을 잘 관리하도록하는 역할
- 전반적으로 컴퓨터가 막힘 없이 잘 돌아가게 하기 위해 형평성 있게, 또 효율적으로 잘~ 관리한다.
- 사용자가 컴퓨터를 편리하게 사용할 수 있는 환경을 제공
- 동시 사용자/프로그램들이 각각 혼자서만 돌아가는 것 처럼 보이는 환상을 제공
3) 분류?
❗
사실 분류에 대해 아는게 그렇게 중요한 것은 아닐 수 있다. 요즘의 거의 모든 운영체제는 다중 작업, 다중 사용자를 지원하며, 시분할 방식을 사용할 것이다. 따라서 너무 당연하게 느껴질 것이다. 그러나 당신이 경험해본 컴퓨터의 기능들이 당연한게 아니라는 것을 한번 쯤 되짚어봤으면해서 굳이 이런거까지 소개한다.
당연하다고 느꼈던게 당연하지 않았던 것이라는 것을 인지하는 순간, 남들이 너~~무 잘 만들어놔서 놓치고 갔던 것들을 캐치하는 순간! 더 이해가 잘 될 것이다@!#!@$
❗
아래와 같은 분류 기준이 있다.
동시 작업 가능 여부
단일 작업
- 한번에 하나만 하는 친구
- MS-DOS 등. 보통 옛날꺼! 엘레베이터같이 특수 목적만을 달성하면 되는 경우도 단일 작업으로 가능할 수 있다
다중 작업
- 동시에 두 개 이상의 작업 처리. 스타크래프트 하면서 디스코드 돌리는게 가능한 것~
- UNIX, WINDOWS 등
사용자의 수
여러 사용자의 계정을 만들어 동시접근을 할 수 있나?
여러 사용자가 쓸 수 있게 한다면, 서로의 파일에 접근을 할 수 없게 해야할 것이고, 또 형평성 있게 자원을 분배하기도 해야할 것
단일 사용자
다중 사용자
- UNIX, NT server
- 여러 유저가 한번에 로그인해서 작업을 할 수 있는 것!
처리 방식
일괄 처리
- 작업을 바로 처리하는게 아니라, 모아서 한꺼번에 처리하는 것
- 현대에는 찾아보기 힘들다
시분할
- 요즘에 많이 쓴다
- 여러 작업을 수행할 때 작은 시간 단위를 기준으로, 각각 프로세스나 사용자에게 시간을 분배해 작업을 처리하게 하는 것
- 타이핑했는데 한 1분 있다가 화면에 출력되면 속이 터지겠지? 그런거 방지하려고 하는거다! 처리할게 많아도 여러개를 조금씩 조금씩 처리해나가는 것
실시간
- 정해진 시간 안에 꼭!!!! 결과가 나오는 것이 보장되어야하는 경우에 쓴다.
- 원자로/공장 제어, 미사일, 반도체 제어 등
4) 운영 체제 예시
UNIX
- 대형 컴퓨터를 위해 만들어짐
- 멀티 태스킹, 다중 유저
- 운영체제를 어셈블리어로 만들다보니 너무 힘들었어서 UNIX 운영체제를 만드려고 언어를 그냥 만들어버렸음
- 이식성이 좋다. C언어는 기계어랑은 독립적인 언어라서!
- 커널의 크기를 작게 만들어놓음. 커널이 최소한의 핵심적인 역할만 가져가는 것
WINDOWS
- 개인용 컴퓨터를 위해 만들어짐
- DOS는 단일 사용자, 단일 작업
- 처음에 만들 때는 메모리 640KB까지만 지원하도록 만들었다고 한다. 이거 보다 더 커질일은 없을 것이라고 해서 ㅋㅋ
- 나중에 WINDOWS 독립적으로 하나 만들었다고 한다.
- GUI 기반, 처음에는 불안했다. 뭐 좀 돌리다보면 죽어버리고
5) 자원의 입장에서 바라보는 운영 체제
운영체제는 자원을 자~알 가지고 놀 줄 알아야한다고 했다. 걔들 입장에서 운영체제 역할을 다시 한번 바라보며 조금 정리해보자.
하드웨어 관리
일단 컴퓨터 하드웨어의 입장에서 보여지는 운영 체제의 역할을 확인해보자
CPU(Central Processing Unit)
- 실질적인 연산이 일어나는 곳이다. 더하고 빼고 논리적인 연산 등등이 일어난다.
- 프로그램은 이런 연산 덩어리이다. 어떤 프로그램의 연산을 CPU에게 맡길지, 그 순서를 스케쥴링 해야한다.
- 하나의 프로그램만 먼저 쭉 처리하고 다른 프로그램을 처리해버리는 식으로 진행하면, 앞에서 1시간이 걸려버릴 경우 뒤의 것은 먹통이 된다. 동영상 다운로드 눌러놓고 친구한테 카톡 보내려고해도 그런거 안되는거임. 다운로드 다 될 때까지 기다려야하는 것
RAM(Memory Unit 중 하나)
- CPU가 아무것도 없는 허공에서 연산할 것들을 가져오는게 아니다. 이러한 프로그램, 즉 연산 덩어리는 필요할 때 RAM에 저장된다.
- RAM은 0, 1을 저장할 수 있는 어떤 장치이다. 연산 덩어리가 어떻게 어떻게 해석되서 0, 1로 바뀌어 여기에 저장된다고 생각하면 된다.
- RAM에 0, 1을 무한하게 저장할 수는 없다. 당연한거다. 얘도 물리적으로 크기가 한정되어 있다. 따라서 이 친구를 잘 쪼개서 쓰는게 중요하다. 또한 컴퓨터를 잘 돌리기 위해서는 어떤 경우 잠깐 RAM에서 프로그램의 일부를 다른 곳에 내려놔야하는 경우도 있다. 다른 애한테 몰아주는게 더 좋을 때도 있기 때문이다.
- 최대한 프로그램을 많이 올려보겠다고 너무 잘게 쪼개면 컴퓨터가 느려지고, 또 너무 큼직하게 하면 여러 프로그램을 한번에 돌리기 힘들어진다.
- 필요할 때는 특정 프로그램들, 특히 앞으로 안쓰일거같은 애들은 내려놓는게 효율이 좋다. 이런애들은 내려놔야한다.
- 위와 같은 경우 RAM을 어떻게 사용해먹을 것인가에 대한, 즉 메모리 관리에 대한 기준, 규칙, 정책이 필요하다.
Disk(Memory Unit 중 하나)
- 프로그램들은 필요할 때 RAM에 올라간다고 했다. 얘들이 평소에 필요하지 않을 때 저장되어있는 곳이 DISK이다.
- 이런 애들을 잘, 빠르게 읽어오거나 저장하기 위한 방법을 강구해야한다.
- 연속적으로 저장하는게 나은지, 아니면 좀 쪼개서 저장하는게 나은지 생각해봐야한다.
- 또, disk는 헤드라는 친구가 하나 하나 읽어서 저장된 정보를 확인하는 방식으로 돌아간다. 어떻게 헤드의 움직임을 최소화할지 생각해봐야한다.
I/O Device
- 입출력 장치는 엄청 느리다. 이런 애가 다른 애들과 정보를 주고 받는 것을 어떻게 해야 좀 효율적으로 할 수 있을지도 운영체제가 결정해야한다.
그 외 자원
프로세스
- 프로세스는 어떻게 생성하고 삭제해야할지,
- 자원 할당과 반환을 어떻게 할지
- 프로세스간 협력은 어떻게 할지
그 외
등등을 고려해야한다.
생략된 부분들이 있을 수 있지만, 이러한 것들을 고려하고 관리하는게 운영체제이다. 뒤의 것들을 매우 간단하게만 설명돼있는데, 추후 알아본다