1. 🖥 운영체제의 정의
운영체제(operating system)란 컴퓨터 하드웨어 바로 윗단에 설치되는 소프트웨어
- 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결
- 소프트웨어지만 system 명칭 사용
- 하드웨어가 운영체제와 한 몸이 되어야만 진정한 컴퓨터 시스템
소프트웨어는 메모리 위
프로그램은 메모리 위에서 실행
- 운영체제도 전원이 켜짐과 동시에 메모리 위에 올라간다
운영체제의 핵심
⚡️ 커널 (kernel)
- 메모리에 상주하는 운영체제의 핵심 부분
- 운영체제의 큰 규모때문에 필수 부분만 메모리 위에 상주
⚡️ 넓은 의미의 운영체제
- 시스템을 위한 유틸리티들
- MS 윈도우 환경에서 파일을 복사하는 프로그램
- 엄밀히 따졌을 때 운영체제의 일부는 아님
- 운영체제에 함께 설치되기 때문에 넓은 의미로 포함
2. 🖥 운영체제의 기능
컴퓨터 하드웨어와 사용자 사이에 존재
1. 하드웨어를 위한 역할
⚡️ 자원관리자(resource manager)
- 효율성이 1순위 목표
- 컴퓨터 시스템 내 자원(resource)를 효율적으로 관리
- CPU, 메모리, 하드디스크 등 하드웨어뿐 아니라 소프트웨어까지
- 예) 파일이 디스크에 어떻게 저장되는지
- 가장 좋은 성능 내도록 하는 역할 담당
⚡️ 균형자
- 사용자 및 프로그램들 자원 분배
- 효율성때문에 일부가 지나치게 희생되는 것 방지
⚡️ 사용자와 운영체제 자신 보호
악의성 프로그램으로부터 보호
- 다른 사용자 프로그램의 메모리 영역 참조
- 다른 사용자의 사적인 파일 접근
- 운영체제가 올라가 있는 메모리 영역 변경
2. 사용자를 위한 역할
컴퓨터 시스템을 편리하게 사용할 수 있는 환경 제공
- 편리한 인터페이스 제공
- 여러 사용자 및 프로그램들이 독자적으로 컴퓨터 사용할 수 있는 환경 제공
3. 🖥 운영체제의 분류
1. 동시작업 지원
⚡️ 단일작업용 운영체제 (single tasking)
- 한번에 하나의 프로그램만 실행
- 초창기 운영체제의 주를 이룸
- MS 윈도우 전에는 도스 (Disk Operating System: DOS) 환경
⚡️ 다중작업용 운영체제 (multi tasking)
- 현재 널리 쓰이는 운영체제
- 동시에 2개 이상의 프로그램 처리 지원
- 대화형 시스템(interative system)이라고도 부름
- 사용자의 입력에 곧바로 응답
- 서버도 서버 컴퓨터도 대화형 시스템에 해당
- 사용자 입력에 곧바로 응답
- 사용자가 혼자 사용하는 것처럼 느낄 수 있는 환경
시분할 시스템 (time sharing system)
- 여러 프로그램이 CPU와 메모리 공유
- CPU 처리 속도는 수 밀리초(ms)로 매우 짧다
- CPU가 하나여도 동시 실행되는 것처럼 보임
다중 프로그래밍 시스템 (multi-programming system)
- 여러 프록램들을 동시에 메모리에 올려놓고 처리하는 시스템
🚨 다중처리기 시스템(multi-processor system)
- 일반적으로는 한 컴퓨터에 하나의 CPU 탑재
- 다중처리기 시스템은 하나의 컴퓨터 안에 여러 개의 CPU
- 서로 다른 CPU에서 여러 프로그램 동시 실행 가능
- 여러 CPU를 관리하기 위해 더 복잡한 운영체제 필요
2. 다중 사용자 동시 지원
⚡️ 단일 사용자용 운영체제
- 한 번에 한 명의 사용자만 사용
- DOS, MS윈도우(최근엔 윈도우도 서버 기능 지원)
⚡️ 다중 사용자용 운영체제
3. 작업 처리방식
⚡️ 일괄처리 (batch processing)
- 요청된 작업을 일정량씩 모아서 한꺼번에 처리
- 모든 작업이 완전히 종료된 후에 결과를 얻을 수 있다
- 예) 펀치 카드(punch card) 시스템
⚡️ 시분할 방식
- 컴퓨터 처리 능력을 일정한 시간 단위로 분할해 사용
- 유닉스 운영체제하의 서버 컴퓨터
- 여러 사용자의 작업을 짧은 시간 단위씩 번갈아가며 처리
- 짧은 응답시간
- 사용자에게 독점적 사용같은 환경 제공 ➡︎ 대화형 시스템
4. 실시간 운영체제 (real time)
- 정해진 시간 안에 어떠한 일이 반드시 처리됨을 보장하는 시스템에서 사용
- 일정 시간 안에 작업 완료 불가시 동작X or 큰위험 초래
- 원자로, 공장 제어 시스템, 미사일 제어 시스템
⚡️ 경성 실시간 시스템 (hard realtime system)
- 주어진 시간을 지키지 못할 경우 매우 위험한 결과 초래
- 로켓, 원자로 제어 시스템 등
⚡️ 연성 실시간 시스템 (soft realtime system)
- 정해진 시간 단위로 전달되어야 올바른 기능 수행
- 시간이 지켜지지 않을 경우 재생이 끊기거나 내용 전달이 정확X
- 멀티미디어 스트리밍 등
4. 🖥 운영체제의 예
1. MS 윈도우
- 마이크로소프트에서 MS-DOS와 윈도우 3.1 등을 발전시킨 것
- 개인용 컴퓨터를 위한 운영체제
- 안정성 ⬇︎, 편리성과 보편성 ⬆︎
⚡️ 기능
- 플러그 앤 플레이 (plug and play)
- 새로운 하드웨어 장착시 운영체제가 자동으로 하드웨어 감지
- 하드웨어 맞게 설정
- 자체적 네트워크 프로그램 지원
- 윈도우 사용자들끼리 파일이나 프린터 등의 하드웨어 공유 가능
⚡️ 버전
초기 윈도우
- 편리한 환경 제공
- 한계
- 그 자체로 독립적인 운영체제X
- MS-DOS위에서 수행
윈도우95
이 자체로 하나의 온전한 운영체제 역할 수행
윈도우 XP
- 인터페이스 측면에서 그래픽 환경과 아이콘 방식 채택
- 동일한 명령어라도 수행하는 방식을 여러 가지 지원
윈도우 NT
- 높은 안정성
- 웹서버 등 다중 사용자용 운영체제로 사용
- MS윈도우처럼 편리한 사용
- 서버 환경 지원으로 웹서버, 전자우편, 파일서버, 데이터베이스 및 통신 기능 손쉽게 관리 가능
2. 유닉스
-
안전성 ⬆︎
- 1969년 벨 연구소에서 최초 개발
- 가장 널리 사용되는 운영체제
-
전문가에게 편리성 ⬆︎
- 대형 컴퓨터 및 전문적인 목적의 컴퓨터에 적합
- 개발 환경을 위해 설계
-
이식성(portability) ⬆︎
- 해당 소프트웨어를 다른 기종의 기계로 옮기기 얼마나 용이한가
- 사람이 이해하기 쉬운 C언어로 작성 (고급언어)
- 당시엔 대부분 기계어에 가까운 어셈블리 언어로 작성
-
작은 커널의 크기
-
소스 코드 공개
- 연구에 보탬
- 학문에서는 유닉스가 거의 표준 운영체제
-
기술이 발전되더라도 확장성 지원 ⬆︎
⚡️ 유닉스 종류
리눅스(Linux)
- 대형 서버뿐 아니라 개인용 컴퓨터에서도 유닉스 널리 사용 가능
맥 (Mac)
5. 🖥 운영체제의 자원 관리 기능
운영체제의 핵심 = 효율적 자원 관리
하드웨어 자원
- CPU와 메모리를 비롯해 주변장치 또는 입출력 장치라 불리는 장치
- CPU와 메모리는 전원이 꺼지면 처리 중이던 정보 제거됨
- 기억해야 하는 부분을 입출력 장치 중 한 종류인 보조기억장치에 파일 형태로 저장
- 저장되는 방식 및 접근 권한 등도 관리
1. CPU 스케줄링 (CPU scheduling)
- 매 시점 어떠한 프로세스에 CPU를 할당해 작업을 처리할 것인지 결정
- 가장 효율적으로 CPU 사용
- 특정 프로세스 불이익 방지
⚡️ 선입선출 (First Come First Served: FCFS)
- CPU를 먼저 얻은 프로세스가 작업을 완료할 때까지 다른 프로세스는 대기
- 전체 시스템 입장에서 비효율적 결과 초래 가능
⚡️ 라운드 로빈 (Round Robim)
- 선입선출 단점 보완 위해 고안
- CPU를 한 번 할당받아 사용할 수 있는 시간을 일정하게(밀리초단위로) 제한
⚡️ 우선순위 (priority)
- 우선순위 높은 프로세스에 CPU 먼저 할당
- 기다린 시간이 늘어날수록 우선순위 증가
2. 주소(address)를 통한 메모리 관리
- 메모리의 어느 부분이 어떤 프로그램에 의해 사용되고 있는지 파악해서 관리
- 메모리가 필요한 프로그램에 할당, 필요하지 않을 때 회수
- 다수의 사용자 프로그램이 서로의 프로세스 영역을 침범하지 않도록 보안 유지
⚡️ 고정분할 (fixed partition)
- 물리적 메모리를 몇 개의 분할로 미리 나누어 관리
- 나뉜 각각의 분할에는 하나의 프로그램이 적재
- 융통성X 효율성X
- 최대 프로그램 수는 분할 개수로 한정
- 분할 크기보다 큰 프로그램은 적재 불가능
- 내부조각 (internal fragmentation) 발생 가능
- 분할 크기보다 작은 프로그램 적재시 남는 영역발생
⚡️ 가변분할 (variable partition)
- 매 시점 프로그램의 크기에 맞게 메모리 분할해서 사용
- 여전히 물리적 메모리보다 큰 프로그램의 실행은 불가능
- 분할 크기와 개수가 동적으로 변화
- 외부조각(external fragmentation) 발생 가능
- 프로그램에 할당되지는 않았지만 크기가 작아 프로그램을 올리지 못하는 메모리 영역
⚡️ 가상메모리 (virtual memory)
- 현대 번용 컴퓨터 환경에서 가장 널리 사용되는 메모리 관리 기법
- 물리적 메모리보다 큰 프로그램 지원 (가상 메모리만큼)
- 가상메모리의 주소를 물리적 메모리 주소로 매핑(mapping)해 주소를 변환 후 물리적 메모리에 올림
- 프로그램 전체가 항상 동시에 사용되는 것은 아님
- 현재 사용되고 있는 부분만 메모리에 올리고 나머지는 하드디스크와 같은 보조장치에 저장
- 스왑 영역(swap area)
- 페이징(paging)
- 가상 메모리 주소 공간은 페이지(page)라는 동일한 크기의 작은 단위로 나뉘어 물리적 메모리와 스왑 영역에 일부분씩 저장
- 동일한 단위로 메모리 분할
3. 인터럽트(interrupt)
- 주변장치 및 입출력 장치 관리 메커니즘
- 입출력 장치: 키보드, 모니터
- 보조기억장치: 하드디스크
⚡️ 신호 (interrupt)
- CPU의 서비스가 필요한 경우 신호를 발생시켜 서비스 요청
- CPU는 인터럽트 발생시 작업을 중단하고 인터럽트 요청 수행
⚡️ 인터럽트 처리루틴
- 인터럽트가 발생했을 때 해주어야 할 작업을 정의한 프로그램 코드
- 운영체제 커널 내에 존재
⚡️ 컨트롤러 (controller)
- 주변장치들이 탑재하고있는 작은 CPU
- 해당 장치에 대한 업무 처리
- 메인 CPU에 인터럽트 발생시켜 보고