[Operating System ②] 운영체제 개념 잡기
[Operating System ②] 운영체제 개념 잡기
HPC Lab 김덕수 교수님의 운영체제 강의를 정리한 내용입니다.
목차
운영체제는 왜 필요한가?
운영체제는 어떻게 분류하는가?
-
몇 명이 사용하는지에 따른 분류
- 단일 사용자
- 다중 사용자
-
동시에 여러 프로그램(프로세스)을 실행시킬 수 있는지에 따른 분류
- 단일 작업
- 다중 작업
-
프로그램을 수행하는 방식이 어떠한지에 따른 분류
- 순차처리
- 일괄처리
- 시분할
- 퍼스널 컴퓨팅
- 병렬처리
- 분산처리
- 실시간
운영체제의 내부는 어떻게 구성되어 있는가?
운영체제는 어떤 작업을 수행하는가?
운영체제는 왜 필요한가?
운영체제란?
컴퓨터 하드웨어를 효율적으로 관리해서 사용자와 응용 프로그램에게 서비스를 제공하는 시스템
즉, 컴퓨터 자원들을 관리하며 사람들이 컴퓨터를 좀 더 ‘잘’ 사용할 수 있게 도와준다.
운영체제는 어떤 부분을 도와주는가?
운영체제가 수행하는 역할은 크게 4가지
- UI => 사용자가 컴퓨터를 편리하게 사용하게 한다.
- CUI : 과거에 사용되던 문자 기반의 인터페이스
- GUI : 현재 많이 쓰이는 그림 기반의 인터페이스
- EUCI : 특별한 목적을 위해 만들어진 인터페이스
- (예) mp3에 특화된 UI
- 자원관리 => 컴퓨터 내부의 리소스를 통제하여 효율적으로 컴퓨터를 사용할 수 있도록 한다.
- HW
- SW
-
프로세스(실행주체)와 스레드(가벼운 프로세스) 관리
- 시스템 보호
- 사용자가 불법적인 형태로 시스템 사용하려고 하는 경우 보호하는 역할 수행
컴퓨터 시스템 구성도
OS는 크게 Kernel과 System Call Interface로 구성된다.
- 커널: 운영체제의 핵심을 모아놓은 것
- 시스템 콜 인터페이스: 커널이 제공하는 기능 중, 사용자가 접근 가능한 기능을 모아놓은 것 (통로 역할)
- 사용자가 커널을 직접 access하게 되면, OS가 HW를 제어하는 데 문제를 일으킬 수 있다.
- 따라서 커널에 access를 원하는 경우, System call interface를 통해 OS 커널에 접근할 수 있도록 요청을 한다.
위에서 부터, 사용자들 / 시스템 콜 인터페이스 / 커널
운영체제는 어떤 종류가 있는가?
분류 방법 크게 3가지
-
동시 사용자 수
: 한 명이 사용하는가 여러 명이 사용하는가? -
동시 실행 프로세스 수
: 동시에 여러 프로그램을 수행할 수 있는가? -
작업 수행 방식(사용자가 느끼는 사용환경)
: 프로그램을 수행하는 방식이 어떠한가?
몇 명이 사용하는가?
- 단일 사용자 : 한 순간에 한 명만 사용할 수 있는 OS
- 비교적 간단하게 만들 수 있다
- 자원관리 쉽다
- 시스템 보호 쉽다
- 다중 사용자 : 한 순간에 여러 명이 사용할 수 있는 OS
- 단일 사용자 시스템에 비해 복잡하다.
- 서버, 슈퍼컴퓨터와 같은 클러스터 등은 다중 사용자 시스템으로 분류 - 자원의 소유권 문제가 존재한다. - 멀티 태스킹이 가능해야 한다 => 여러개의 프로그램을 돌릴 수 있어야 한다
동시에 여러 프로그램을 실행시킬 수 있는가?
- 단일작업 : 하나의 프로그램(프로세스)만 실행 가능
- 하나를 마친 후에 다른 프로그램 실행해야 한다.
- 요즘 찾아보기 힘듦 -(예) MS DOS => 실행된 프로그램 종료될 때까지 기다려야 함
- 다중작업 : 동시에 여러개의 프로그램(프로세스) 실행 가능
- 창 여러개 띄워놓고 작업할 수 있다.
- 우리에게 익숙한 형태 - 단일 작업 시스템보다 구조가 복잡하다
프로그램을 수행하는 방식이 어떠한가?
운영체제 발전 역사와 관련 있음
1-1. 순차처리
: 가장 원시적인 처리 방법
1-2. 일괄처리(Batch processing)
: 모아뒀다가 한꺼번에 처리
1-3. 시분할(Time-sharing)
: 짧은 시간단위로 각 프로그램을 돌아가며 처리
2-1. 퍼스널 컴퓨팅
: 단말기를 사용하지 않고 개인용 OS를 사용
2-2. 병렬처리
: 컴퓨터 내에 여러개의 CPU를 두어 성능을 향상시킨 방식
2-3. 분산처리(Distributed processing)
: 여러 대의 컴퓨터를 연결하여 성능을 향상시킨 방식
3-1. 실시간(Real-time)
: 처리에 시간 제한을 둔 방식
(1) 작업 수행 방식1 - 순차 처리
- 운영체제가 하는 역할 모두를 사용자가 직접 수행
- 프로세스로 어떤 프로그램을 수행할지
- 해당 프로그램의 어느 지점을 수행할지(PC)
- 어디서 읽어올지
- 실행할 프로그램 마다 환경을 다시 설정 -오랜 준비 시간 소요
(1) 작업 수행 방식2 - 배치시스템
순차처리방식이 준비 시간 길다는 문제를 해소
- 실행할 프로그램들을 모아뒀다가 한꺼번에 처리
- 프로그램 사이사이 준비시간을 줄일 수 있음
- (예) C 파일 완료 후 Java파일 완료 후 Python 파일 실행
배치시스템의 장단점
- 시스템이 처리하기 편한 방법
- 모아둿다가 한번에 처리할 수 있으므로
- 쓰루풋 좋음
- 하지만, 결과 언제 받아볼 지 알 수 없음
(1) 작업 수행 방식3 - 시분할시스템
- 시간을 나누어서 사용하는 방식(요즘 사용되는 시스템 방식)
- 과거: A완료 => B완료 => C완료
- TS : A(1) => B(1) => C(1) => A(2) ….
- 여러 사용자가 자원을 동시에 사용
- 이 시기에 파일 시스템과 가상 메모리가 등장하고 해당 기능들을 관리하기 시작
- 사용자 지향적
-
대화형 시스템
: 한 작업이 끝날 때까지 기다리는 것이 아니라, 일정시간 지나면 반응 하기 때문에 -
단말기 사용한 접근
: 컴퓨터 내부에 HW가 있는 형태가 아니라. 단말기를 사용해서 결과화면을 출력하고, 키보드로 입력된 내용을 전달해주는 방식이었음
-
시분할 시스템 구조
-
초록
: 실제 연산하는 곳 -
분홍
: 사용자들이 단말기로 요청을 보내고, 결과를 받아보는 곳
시분할 시스템의 장단점
- 항상 일정 시간 내에 반응하기 때문에, 사용자 입장에서는 좋음
- 여러 개의 프로세스가 프로세서를 나눠서 씀
- 유휴 시간 감소됨
- 하지만, 통신으로 인한 문제점
- 단말기를 통해 접속하기 때문에 통신에 따르는 비용 증가
- 통신에 따르는 보안 문제 등장
- 너무 많은 사람들이 접속 할 경우 부하가 커지고 느려진다.
(2) 작업 수행 방식1 - 퍼스널 컴퓨팅
단말기 쓰는거 너무 느리니까 나 혼자만 쓰고 싶다
- 단말기를 사용하는 기존방식과 추구하는 목표 다름
- 과거의 목표 cpu활용률 높이기(컴터를 쉬지않고 돌리는 것)
- 개인화되면서, 사용자가 얼마나 편리하게 시스템을 사용하느냐가 중요해짐
- 한 사람이 쓰기 때문에 OS가 단순해짐
- 그대신 사용자 편리성 높여주는 쪽으로 발전
- 혼자쓰니까 빠르지만, 비싼거 사기 힘드니까 성능 낮음
(2) 작업 수행 방식2 - 병렬 처리 시스템
성능 구리다. 컴퓨터 안에 CPU 여러개 박아서 성능 높이자
- 하나의 시스템에 여러 개의 프로세서를 사용하는 방식
- Tightly-coupled system의 형태(자원과 꽉 묶여있다)
- CPU는 여러갠데 기타 자원은 공유해서 사용하는 형태
- 사용 목적
- 신뢰성: CPU 1개 고장나도 다른 애들이 대신 일 해줄 수 있음
- 하지만, CPU가 여러개니까 그들 사이에 관계나 역할을 나눌 필요성 생김
(2) 작업 수행 방식3 - 분산 처리 시스템(병렬 처리의 한 분야)
Tightly-coupled 방식으로 CPU 100개의 성능을 내고 싶다?
하나의 컴퓨터에 CPU 100개 심을 수 없음. 공간적/시스템적 한계
즉, 확장에 제약이 존재
그럼, 내부에 프로세서 여러개를 사용하는 방식이 아니라, 컴퓨터 여러대를 붙여서 성능을 높이자
분산처리 시스템 : LAN(네트워크)를 사용해서 컴퓨터 여러 대를 묶은 병렬처리 시스템
물리적인 통신망을 이용해 연결한 형태
- 각각의 노드(붙어있는 컴터)들은 자기만의 OS를 가짐
- 이것들을 묶어서 관리해주는 분산운영체제가 존재
- 클러스터 시스템(슈퍼컴), 클라이언트-서버 시스템 등…
분산처리 시스템의 장단점
- 장점
- 신뢰성
- 단점
- 구축과 관리 힘들다
(3) 작업 수행 방식- 실시간 시스템
- 작업 처리에 제한 시간을 갖는 시스템
- 작업 요청하면 적어도 이때까지는 요청 받아야 한다
- 하드 리얼타임 (예시)
- 원자력 관리 시스템, 군에서 사용하는 무기 관리
- 온도체크해서 1초마다 알려주는 시스템
- 1초만에 온도체크 실패? 온도 기준치 이상으로 올라갈 수 있고, 발전소 위험에 처할 가능성 있음
- 즉, 시간안에 결과를 보장하지 못하면 큰 문제가 발생하는 시스템
- 소프트 리얼타임 (예시)
- 유튜브의 동영상
- 기본적으로 1초에 30장의 그림을 만들어 내야 함
- 하지만, 네트워크 느리거나 문제가 발생해서 흐릿하게 나오는 경우
운영체제의 내부는 어떻게 구성되어 있는가?
크게 두가지로 구성되어 있다
- 커널 -> 알맹이라는 의미
- OS의 핵심 부분.
- 즉, 가장 빈번하게 사용되는 부분을 모아놓은 것
- 예) 프로세서 관리, 메모리 관리 등…
- 계속 써야 하기 때문에 메모리에 ‘항상’ 올라가 있음
- 유틸리티 -> 커널을 제외한 나머지 부분
- 대표적으로 ui나 자주사용하지 않는 부분
- 가끔씩 쓰기 때문에 필요한 순가 메모리에 올려서 사용함
OS는 컴퓨팅 리소스를 관리한다
단일 구조 운영체제
- 운영체제의 기능을 하나의 거대한 커널, 즉 단일 구조로 모아놓은 것
- 프로그램으로 예를 들면 메인 안에 모든 것들이 다 짜져있는 형태
- 장: 커널 내의 각 기능들 사이에 모듈간에 직접 통신 가능. 빠르게 할 수 있음
- 단: 기능이 추가될 수록 사이즈 너무 커짐. 버그 발생할 경우 유지보수 힘듦
- 또 악성코드 침입한다면 걔가 커널 전체기능 다 건드려서 영향 줄 수 있음
계층 구조 운영체제
-
단일구조 운영체제
의 문제를 해결하기 위해 계층별로 묶자 => 현대 운영체제의 형태 - 모듈화 해서 각 기능에만 집중
- 설계와 구현, 문제 생길 때 유지보수 단순화
- 하지만, 여러 계층을 거쳐서 기능이 실행되므로 성능 떨어질 수 있음
마이크로 커널 구조
- 커널이 점점 커지니 문제가 된다.
- 커널에 필수 기능만 담고, 나머지 응용프로그램처럼 사용자 영역에서 조작하자
- 메모리 관리, 프로세스관리, 통신관리만
운영체제는 어떤 작업을 수행하는가?
OS의 기능은 ‘관리’에 있다
다양한 HW, SW리소스를 관리
프로세스 관리
-
프로세스
: 실행 중인 프로그램- 프로세서와 구별해라
- 여러개의 프로세스가 하나의 자원을 동시에 쓰려고 할 때 중재하는 역할 함
- 교착 상태, 데드락
- 정보 관리를 위한 PCB를 가지고 있다
프로세서 관리
- 누구한테 얼마만큼 줄 것인가
- 스케줄링 등
메모리 관리
- 일반적으로
Memory
==주기억장치(메인보드에 꽂아쓰는 DRAM)
- 여러 개의 프로세스가 메모리를 동시에 사용하기 때문에, 어케 할당하고 회수하는지를 결정
- 불법적인 사용 막기
파일 관리
대표적인 SW 리소스인 파일을 관리하는 역할도 수행
주변장치 입출력 관리
프로세서(CPU)가 직접 입출력할 수 없기 때문에, OS가 중간에서 관리
‘프로세서(CPU)’가 커널에 요청을 하면 ‘OS’가 ‘입출력장치’와 통신
’
댓글남기기