김덕수님 운영체제 강의 (유튜브 HPR Lab.KOREATECH)
컴퓨터 자원들을 효율적으로 관리해서 사용자에게 서비스를 제공함.
사용자가 컴퓨터를 쉽게 다룰 수 있게 해주는 인터페이스.
대부분 운영 체제 전공책을 보면 OS에 대한 정의를 엄밀하게 하지 않는다.
전공 서적이나 위키별로 운영 체제에 대한 정의는 조금씩 다 다른데, 컴퓨터 자원을 효율적으로 관리하기 위한 시스템, 공통된 소프트웨어 플랫폼, 컴퓨터 응용 프로그램 관리자 등으로 다양하다
An Operating System is a program that manages a computer's hardware
-윈도우, 유닉스, 리눅스 등등
-cpu
-그래픽카드(gpu)
-응용 전용 처리장치 등
-주 기억장치
-보조 기억장치
-키보드/마우스
-모니터, 프린터
-네터워크 모뎀 등
-컴퓨터의 두뇌(중앙처리장치)
-연산 수행
-컴퓨터의 모든 장치의 동작 제어
프로세서 내부에 있는 메모리
-프로세서가 사용할 데이터 저장
-컴퓨터에서 가장 빠른 메모리!
-용도에 따른 분류 : 전용 레지스터, 범용 레지스터
-사용자가 정보 변경 가능 여부에 따른 분류: 사용자 가시 레지스터, 사용자 불가시 레지스터
-저장하는 정부의 종류에 따른 분류: 데이터/주소/상태 레지스터
프로그램 카운터, 명령어 레지스터, 누산기는 기본 교양으로 알고 있을 것.
-프로세스(Process)생성 및 관리
(프로세스=프로그램 정도로만 일단 알고있자)
(3장)
-프로그램의 프로세서 사용 시간관리
-복수 프로그램간 사용 시간 조율 등
(4~5장)
-프로그램(os, 사용자sw 등), 사용자 데이터 등
-뭔가 저장한다 하면 다 메모리임
보조기억장치(HDD)
메인 메모리(DRAM)
캐시in CPU)
프로세서가 직접 접근할 수 있는 메모리 중 용량 갖아 크고, 가격 가장 저렴
(보조기억장치까지는 프로세서가 도달 못함)
-cpu내부의 메모리
-주기억장치와 같은이유로 생겨남(cpu와 저장장치의 속도차)
-캐시 메모리가 엄청 작은데, 제 기능을 할 수 있긴 한걸까?
<결론>
지역성은 캐시 적중률(cache hit ratio)과 밀접.
알고리즘 성능 향상 위해 중요한 요소
비록 용량은 적지만, 위와 같은 이유로 제 역할이 가능.
(Auxiliary memory/secondary memory/storage)
-프로그램과 데이터 저장
-용량 크고, 가격 저렴
-프로세서가 직접 접근할 수 없다->주기억장치를 거쳐 접근
질문: 만약 주기억장치 메모리는 8GB인데 실행하려는 프로그램이 20GB라면?
가상 메모리 활용(virtual memory)
가상메모리는 보조기억장치의 일부를 를 주기억장치처럼 활용(나중 강의에서 다룰 예정)
자원(프로세서, 메인 메모리, 주변 장치 등)이 서로 신호를 주고받을 수 있는 통로
데이터 버스-테이터가 타는 버스, 주소 버스-주소가 타는 버스, 제어 버스-제어신호가 타는 버스
컴퓨터가 계산할 때 꼭 있진 않아도 되는 것들.
장치 드라이버를 통해 os가 해당 주변장치를 제어할 수 있게 해줌
-CUI(Character user interface)
-GUI(Graphical User interface)
-EUCI(End-User Comfortable Interface)
특정 목적을 위해 만들어진 기계에 특화된 ui(예. mp3는 mp3만의 ui를 가진다, 그게 EUCI)
-HW resource(processor, memory, I/O devices, Etc.)
-SW resource(file, application, message, signal, Etc.)
process:실행의 주체, thread: 상대적으로 가벼운 process
이정도만 일단 이해하자.
-Kernel이 os의 핵심.
-사용자가 Kernel에 접근하는 통로가 System Call Interface(직접 kernel에 접근하진 못함)
-아래 그림에서 시스템 라이브러리가 SCI고, 그 아래가 커널
-Single-user system (오늘 날 우리가 쓰는 개인용 노트북)
-Multi-user system
-Single-tasking system
-Multi-tasking system(Multiprogramming system)
요즘은 single-tasking system 찾아보기 어렵다.
-Batch processing system(일괄처리 시스템)
-Time-sharing system(시분할 시스템)
-Distributed processing system(분산처리 시스템)
-Real-time system(실시간 시스템)
-운영체제 개념x
-사용자가 기게어로 직접 프로그램 작성
-실행하는 작업 별 순차 처리.
각각의 작업에 대한 준비 시간이 소요
예를들어 누구는 c, 누구는 자바, 누구는 python을 실행하기 원하면 각각에 맞게 컴퓨터를 다시 셋팅하는 시간이 필요했다.
그래서 나온게 batch system!
-모든 시스템을 중앙(전자계산소 등)에서 관리 및 운영
-요청 작업(천공카드 등)을 일정 시간 모아 두었다가 한 번에 처리
-시스템 지향적(System-oriented)
-장점:
1) 많은 사용자가 시스템 자원 공유
2) 처리 효율(throughput)향상
-단점:
1)생산성(productivity)저하.
같은 유형 작업들이 모이기를 기다려야 함->내 작업이 언제 끝날지 도통 알 수 없음
2)긴 응답시간(turnaround time)
약 6시간(작업 제출~결과출력 시간)
응답시간이 너무 긴 단점. 그래서 등장한 게 Time Sharing Systems
여러 사용자가 자원을 동시에 사용
(요즘 시스템들도 다 이 형태를 띤다)
-os가 파일 시스템 및 가상 메모리 관리
(여러 사용자가 사용하니, 어떤게 누구 파일인지 정리할 필요성과(파일 시스템)메모리도 많이 필요하니 가상메모리 필요성 대두)
사용자 지향적(User-oriented)
-대화형(conversational, interactive)시스템
(작업 진전이 있을 때마다 단말기를 통해 보여줌)
-단말기(CRT terminal)사용
장점
-응답시간(response time)단축 (약 5초)
-생산성 향상(프로세서 유휴 시간 감소)
단점
-통신 비용 증가(통신선 비용, 보안 문제 등)
-개인 사용자 체감 속도 저하
동시 사용자 수 증가->시스템 부하 증가->느려짐(개인관점)
-개인이 시스템 전체 독점
-CPU 활용률(utilization)이 고려의 대상이 아님
(이 전까지는 비싼 컴퓨터를 샀으니, 최대한 cpu를 가동해 뽕을 뽑는게 중요했음)
-os가 상대적으로 단순->하지만 다양한 사용자 지원 기능 있음
장점
빠른 응답시간
단점
(이전 컴퓨터들과 비교했을 때) 성능(performance)이 낮음
혼자 쓰다보니 성능이 낮다? -> 한 컴퓨터에 여러개의 프로세서를 사용하자!
단일 시스템 내에 둘 이상의 프로세서 사용
메모리 등의 자원 공유(Tightly-coupled system)
사용목적
-성능 향상
-신뢰성 향상(하나가 고장나도 정상 동작 가능)
프로세서간 관계 및 역할 관리 필요
이 시스템은 확장성의 한계가 있다. 컴퓨터 한 대에 cpu 100개를 넣을 수는 없는 노릇이니.
그래서 등장한 게 Distributed Processing Systems. 아싸리 여러 컴퓨터를 묶어 버리는 거다.
***네트워크를 기반으로 구축된 병렬처리 시스템(Loosely-coupled System)
-각각의 컴퓨터를 노드라 부르고, 중앙의 분산운영체제에서 이 노드들을 관리함
-물리적인 분산, 통신망 이용한 상호 연결
-각각 운영체제 탑재한 다수의 범용 시스템으로 구성
-사용자는 분산운영체제를 통해 하나의 프로그램, 자원처럼 사용 가능(은폐성, transparency)
-각 구성 요소들간의 독립성 유지, 공동작업 가능
-Cluster system, client-server system, P2P 등
장점
-자원 공유를 통한 높은 성능
-고신뢰성, 높은 확장성
단점
-구축 및 관리가 어려움
작업 처리에 deadline을 갖는 시스템(반드시 이 때 까진 되야해!)
<중요도>
제한 시간 내에 서비스를 제공하는 것 > 자원 활용 효율
작업의 종류
1.Hard real-time task
-시간 못지키면 큰 일 나는 것(발전소 제어, 무기 제어 등)
Soft real-time task
-큰일 안나는 것(동영상 재생)
Non real-time task
커널(kernel)
-영어로 알맹이.
-커널을 제외한 부분이 유틸리티
-os의 핵심(메모리 상주)
-가장 빈번하게 사용되는 기능들(processor, memory 관리 등)
동의어:
핵(necleus), 관리자(supervisor)프로그램, 상주 프로그램(resident program), 제어 프로그램(control program) 등
유틸리티(Utility)
-비상주 프로그램
-UI 등 서비스 프로그램
사진에서 kernel, system calls, utilities가 os
장점
-커널 내 모듈간 직접 통신
-효율적 자원 관리 및 사용
단점
-커널의 거대화
-오류 및 버그, 추가 기능 구현 등 유지보수가 어려움
-동일 메모리에 모든 기능이 있어, 한 모듈의 문제가 전체 시스템에 영향(예, 악성 코드 등)
이 문제 때문에 기능별로 분류할 필요성이 생겼고, 그래서 등장한 게 계층 구조(기능별로 나누자!)
기능별로 나눈 것(모듈화)
현재 대부분의 운영체제가 이 형태
장점
-모듈화 (계층간 검증 및 수정 용의)
-설계 및 구현의 단순화
단점
단일구조 대비 성능 저하
원하는 기능 수행 위해 여러 계층을 거쳐야 함
프로세스(process)관리
프로세서(processor)관리
메모리(memory)관리
파일관리
입출력(I/O)관리
보조 기억 장치 및 기타 주변장치 관리
프로세스
-커널에 등록된 실행 단위(실행 중인 프로그램)
os의 process관리 기능
-생성/삭제, 상태관리
-자원할당
-프로세스 간 통신 및 동기화(sychronization)
-교착상태(deadlock)해결
*교착상태란 여러 프로세스들이 하나의 자원을 두고 싸움질 하는 것.
프로세스 정보 관리
PCB(Process Contrl block)
프로세서 =CPU 라고 일단 알아두자
중앙 처리 장치(CPU)
프로그램을 실행하는 핵심 자원
프로세스 스케줄링(Scheduling)
시스템 내의 프로세스 처리 순서 결정
프로세서 할당 관리
프로세스들에 대한 프로세서 할당(한 번에 하나의 프로세스만 사용 가능)
메모리 할당 및 회수
각 프로세스의 할당 메모리 영역 접근 보호
말 그대로 파일 관리 ㅇㅇ
파일: 논리적 데이터 저장 단위
프로세서가 입출력 직접 접근할 수 없고 os통해 할 수 있음
그외