[OS] 운영체제의 목적, 분류, 예

Doodung·2022년 1월 20일
0

OS - 운영체제

목록 보기
3/15
post-thumbnail

☑️운영체제란?

  • 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층

다른 응용 소프트웨어와는 다르게 하드웨어를 직접 관리해주면서 편리한 인터페이스 제공해야하기 때문에 굉장히 까다로운 소프트웨어다.

  • 협의의 운영체제 (커널) → 좁은 의미

    : 운영체제의 핵심 부분으로 메모리에 상주하는 부분 (보통 운영체제의 정의를 이걸로 한정짓는다.)

  • 광의의 운영체제 → 넓은 의미

    : 커널 뿐 아니라 각종 주변 시스템 유틸리티를 포함한 개념, 메모리에 상주하지 않는 별도의 프로그램들

    ex) 윈도우즈 운영체제를 설치하게 되면 부가적인 프로그램등이 함께 설치가 된다.
    이는 하나의 프로그램이기 때문에 항상 메모리에 상주하는 커널에 포함되진 않는다.
    커널 뿐만 아니라 최소한 필요한 유틸리티 등을 포함해서 광의의 운영체제라 한다.


☑️운영체제의 목적

  1. 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공
    • 운영체제는 동시 사용자/프로그램들이 각각 독자적 컴퓨터에서 수행되는 것 같은 환상(일루전)을 제공
    • 하드웨어를 직접 다루는 복잡한 부분을 운영체제가 대행
  2. 컴퓨터 시스템의 자원을 효율적으로 관리
    • CPU, 메모리, I/O 장치 등의 효율적 관리 (하드웨어 자원)
      • 주어진 자원으로 최대한의 성능을 내도록 → 효율성
      • 특정 사용자/프로그램의 지나친 불이익이 발생하지 않도록 → 형평성
    • 사용자 및 운영체제 자신의 보호
    • 프로세스, 파일, 메세지 등을 관리 (소프트웨어 자원)

☑️운영체제의 분류

👀 동시 작업 가능 여부

  1. 단일 작업(single tasking)
    - 한 번에 하나의 작업만 처리
    ex) MS-DOS 프롬모트 상에서는 한 명령의 수행을 끝내기 전에 다른 명령을 수행시킬 수 없음, 옛날 휴대폰, 엘리베이터 등등… 특수 목적으로 제작된 운영체제는 단일작업만 지원함
  2. 다중 작업(multi tasking)
    - 동시에 두 개 이상의 작업 처리
    ex) UNIX, MS Windows 등에서는 한 명령의 수행이 끝나기 전에 다른 명령이나 프로그램을 수행할 수 있음. 요즘은 다중 작업이 가능한 기기들로 발전함.

👀 사용자의 수

  1. 단일 사용자(single user)
    ex) MS-DOS, MS Windows, 단일 작업은 단일 사용자에 해당됨.
  2. 다중 사용자(multi user)
    ex) UNIX, NT server

👀 처리 방식

  1. 일괄 처리 (batch processiing) : 역사속의.. 시스템
    • 작업 요청의 일정량 모아서 한꺼번에 처리
    • 작업이 완전 종료될 때까지 기다려야 함
    • 현대 운영체제에서 찾아보기 어려움
      ex) 초기 punch card 처리 시스템
  2. 시분할 (time sharing)
    • 현재 사용하는 방식
    • 여러 작업을 수행할 때 컴퓨터 처리 능력을 일정한 시간 단위로 분할하여 사용 (CPU 기준으로)
    • 일괄 처리 시스템에 비해 짧은 응답 시간을 가짐 ex)UNIX
    • interactive 한 방식 - 내가 컴퓨터 키보드 두드렸을때 화면에 바로 나오는 것
    • 시간에 deadline이 있는 것이 아니라 사용자가 엄청 많으면 조금 느릴 수도 있다. 사람이 느끼기에 빠르게 해주면서 동시에 주어진 자원을 최대한 활용하는 것이 목적이다.
  1. 실시간(Realtime OS)
    • 정해진 시간(deadline) 안에 어떠한 일이 반드시 종료됨이 보장되어야 하는 실시간 시스템을 위한 OS
      ex) 원자로/공장 제어, 미사일 제어, 반도체 장비, 로보트 제어
    • 실시간 시스템의 개념 확장
      • Hard realtime system(경성 실시간 시스템)
      • Soft realtime system(연성 실시간 시스템) : 영화 프레임같이..

→ 우리가 사용하는 운영체제는 다중 작업, 다중 사용자, 시분할 방식으로 운영되고 있다.

몇 가지 용어 - 비슷한 뜻
Multitasking : CPU를 짧은 시간 간격으로 분할해서 실행하여 동시에 실행하는 것처럼 태스크가 나누어 지는 것. → 동시성
Multiprogramming : 여러 프로그램이 메모리에 동시에 올라가 있음을 강조.
Timesharing : 시간을 공유해서 쓴다. CPU의 시간을 분할하여 나누어 쓴다는 의미를 강조.
Multiprocess : 여러 프로그램이 동시에 실행되는 것.

위와 다른 것
Multiprocessor : 하나의 컴퓨터에 CPU(processor)가 여러 개 붙어 있음을 의미.
멀티 태스킹도 가능하지만 하드웨어적으로 다르다는 것. → 병렬적


☑️운영체제의 예

  • 유닉스(UNIX)
    • 코드의 대부분을 c언어로 작성
    • 높은 이식성
    • 최소한의 커널( : 메모리에 상주하는 핵심) 구조
    • 복잡한 시스템에 맞게 확장 용이
    • 초창기 소스 코드 모두 공개
    • 프로그램 개발에 용이
    • 다양한 버전
      • system V, FreeBSD, SunOS, Solaris
      • Linux : 공개 소프트웨어 정신으로 소스코드 모두 공개 → 유닉스는 대형 컴퓨터를 위한 것이지만 리눅스는 그렇지 않음. 안드로이드도 운영체제 커널은 리눅스 커널을 쓴다.
  • DOS(Disk Operating System)
    • MS사에서 1981년 IBM-PC를 위해 개발
    • 단일 사용자용 운영체제, 메모리 관리 능력의 한계(주 기억 장치 : 640KB)
  • MS Windows
    • MS사의 다중 작업용 GUI 기반 운영체제
    • Plug and Play, 네트워크 환경 강화
    • DOS용 응용 프로그램과 호환성 제공
    • 불안정성(초창기 → 지금은 불안정한것이 많이 해소되었다.)
    • 풍부한 지원 소프트웨어
  • Handheld device를 위한 OS
    • PaimOS, Pocket PC(WinCE), Tiny OS
  • iOS, AOS 등등…

☑️운영체제의 구조

  • 누구한테 CPU를 줄까? → CPU 스케줄링

CPU는 굉장히 빠르기 때문에 프로그램들에게 줬다 뺐었다 관리.
이론적으로 CPU를 제일 짧게 사용할 프로그램에게 CPU를 우선 주게되면 평균적인 시간이 좋아진다.
하지만 결론적으로 짧은 시간에 줬다 뺏었다 하는게 더 좋다.

  • 한정된 메모리를 어떻게 쪼개어 쓰지? → 메모리 관리

메모리를 많이 필요로 하는 프로그램이 있기 마련이다.
프로그램이 너무 많아지면 각각이 갖는 메모리 공간이 너무 작아진다.
cpu에서 실행하려면 메모리에 올라와 있어야 한다.

메모리에 너무 많은 프로그램을 올려놓는거 보다는 cpu에서 원활히 실행될 수 있는 제한 메모리 용량이 있다. 워킹셋 모델이라고 너무 많은 프로그램이 메모리에 올라오려고 하면 일정부분 빼고 디스크로 쫓아내서 원활히 수행하도록.

경우에 따라서 디스크 io를 하며 관리. (무조건 엔분의 일보다 특정 애에게 몰아주기로.)
메모리에서 어떤걸 쫓아내야 하는가가 중요한 이슈가 된다.

cpu에서 곧 사용할 것을 쫓아내지 않아야 한다. 이러한 미래를 어떻게 예측할까?
→ 최근에 사용이 많이 되었으면 미래에도 사용할 가능성이 높겠구나. 과거를 통해서 미래를 예측한다.

  • 디스크에 파일을 어떻게 보관하지? → 파일 관리

디스크는 헤드가 움직이면서 데이터를 읽기 때문에 메모리 하고는 다르다.
디스크도 스케줄링이 필요하다. 디스크에 들어온 요청들을 처리해야한다.
헤드에 가까운 위치에 들어온 요청이 있으면 나중에 들어왔을 지라도 먼저 처리하는 (디스크 헤드의 이동을 줄이는) 방법으로.

cpu, 디스크 스케줄링은 좀 다르다. cpu는 너무 빠르기 때문에 이것을 어떻게 관리할 것인가?
디스크는 헤드가 움직이며 처리해야 하기 때문에, 어떻게 하면 움직임을 최소화 하면서 많은 요청을 빨리 처리할수 있는가?가 관건이 된다.

  • I/O device를 어떻게 관리할 것인가? 각기 다른 입출력장치와 컴퓨터 간에 어떻게 정보를 주고받게 하지? → 입출력 관리

기본적으로 i/o디바이스는 느리다. 워낙 느리기 때문에 cpu와 정보를 주고받을때 어떻게 할것인가? 이것이 입출력 관리이다.

입출력 관리는 기본적으로 인터럽트에 의해 관리한다. → 인터럽트는 cpu는 워낙 빠르기 때문에 자기일을 하고 있다.

i/o에 관여하지 않고, 그러다 i/o가 cpu에게 보고해야 할 일이 있으면 인터럽트를 걸어서 cpu에게 알려주면 cpu는 다음 작업을 하기 전에 요청을 처리해주는 것.

  • 이런 하드웨어 말고 컴퓨터 안에서 돌아가는 프로그램들을 어떻게 관리할 것인가? → 프로세스 관리, 그 외 등등..
profile
반가워요!

0개의 댓글