[OS] Introduction to Operationg Systems

kmjoo·2021년 12월 27일
0
post-thumbnail

운영체제란?

  • 일종의 소프트웨어
  • 하드웨어 바로 윗단에 설치되는 소프트웨어
  • 하드웨어와 각종 소프트웨어, 사용자를 연결해주는 계층

좁은 의미의 운영체제

: 커널

  • 운영체제의 핵심 부분
  • 컴퓨터 전원을 켜서 부팅이 이루어진 이후로 항상 메모리에 상주하는 부분

넓은 의미의 운영체제

  • 커널을 포함해서 여러 주변 시스템을 다루는 유틸리티들을 포함한 개념
    • 일례로 Windows를 설치하면 파일 복사 등의 프로그램들도 함께 설치됨
    • 이러한 필요한 유틸리티들도 포함하여 운영체제의 범주에 넣기도 함

운영체제의 역할

  • 가장 중요한 역할은 하드웨어의 효율적 관리 (컴퓨터 시스템의 자원을 효율적으로 관리)
    • 컴퓨터 시스템의 자원 == 하드웨어 자원 (프로세서, 기억장치, 입출력 장치 등) + 소프트웨어 자원 (프로세스, 파일, 메시지 등)
    • 주어진 자원으로 최대한의 성능을 내도록 하는 것
    • 즉, 효율성 & 형평성이 고려된 자원 분배가 필요함
  • 사용자가 컴퓨터를 편리하게 사용할 수 있게 해주는 것
  • 사용자 및 운영체제 자신을 보호
  • 현대의 컴퓨터는 여러 프로그램이 한 대의 컴퓨터에서 동시에 실행되는 것을 지원하고 있음

운영체제의 분류

현재의 운영체제는 multi tasking / multi user / time sharing 방식 사용

동시 작업 가능 여부

  • 단일 작업 (single tasking)

    • 한 번에 하나의 작업만 처리
    • 이전의 운영체제는 single tasking만 가능했음 (MS-DOS 등)
      • 한 명령의 수행을 끝내기 전에 다른 명령을 수행시킬 수 없음
    • 설계하기가 매우 쉬웠음
    • 전화만 받는 전화기, 엘리베이터 등 특수목적의 기기의 경우, 기능이 1개이기 때문에 단일 작업 지원함
  • 다중 작업 (multi tasking)

    • 동시에 두 개 이상의 작업 처리
    • 현대적인 운영체제는 다중 작업을 지원해주는 운영체제라고 생각해도 됨 (unix, windows, 스마트폰 내 운영체제 등)

사용자의 수

: 컴퓨터 한 대를 여러 사용자가 동시에 접속해서 쓸 수 있는가?

  • 단일 사용자 (single user)

    • single tasking은 당연히 single user만 지원함
      • 작업을 하나밖에 못하기 때문
    • Windows는 기존에 single user만 가능했지만, 서버 기능을 추가시키면 multi user 기능이 지원이 되기도 함
  • 다중 사용자 (multi user)

    • UNIX, linux 등의 서버에 계정을 여러 개 만들고, 원격에서 계정을 통해 컴퓨터에 동시에 접속하는 것이 multi user용 운영체제라고 할 수 있음
    • 사용자가 많을 경우,
      • 각 사용자의 파일/메모리 접근을 다른 사용자가 볼 수 없게 하는 보안 기능
      • 사용자 간 형평성 있는 자원 관리
      • 등의 기능이 필요함

처리 방식

  • 일괄 처리(batch processing)

    • 작업을 바로바로 처리하는 게 아니라, 작업을 모아서 한꺼번에 처리
    • 현대의 운영체제에서는 찾아보기 어려움
  • 시분할(time sharing)

    • 현대의 운영체제, 지금 사용하는 컴퓨터 그자체로 이해해도 됨
      • 범용 컴퓨터에서 사용
    • 여러 작업이 동시에 실행
      • 자세히 살펴보면 운영체제가 작은 시간단위마다 각각의 작업에 리소스를 할당하는 식으로 나누어서 지원하는 방식
      • 각각의 사용자 입장에서는 interactive한 서비스를 받을 수 있음
    • 짧은 응답시간
    • 시간의 제약조건을 만족하지 않음
      • 사용자가 엄청 늘어나면 다소 느리다는 느낌을 받을 수 있음
    • 사람이 느끼기에 빠르게 해주면서, 주어진 자원을 최대한 활용하는 것이 목적
    • 따라서 정확한 시간을 지켜주는 시스템은 아님
      • 사람에 특화된 시스템
  • 실시간(Realtime OS)

    • 정해진 시간 안에 어떤 일이 반드시 종료됨이 보장됨

      • 특수 목적을 가진 시스템에서 사용
        • 원자로 공장제어, 미사일 제어, 로보트 제어 등
        • ex) 반도체 공정은 pipelining으로 진행됨. 각 과정에 데드라인이 있고, 해당 데드라인에 맞춰서 제품이 나옴. 나온 제품은 다음 과정으로 넘어감. 만약 정전이 한 번 나면 pipeline 내에 있던 모든 제품을 버려야 함. 따라서 정전 1번이 날 경우 30일동안 제품이 안나옴. 1번 공정부터 다시 해야되니까! 그래서 각 과정이 데드라인을 지키는게 매우 중요하고, 이것이 전체 과정에 매우 큰 영향을 미침. 따라서 이러한 경우에는 Realtime OS를 사용함
      • 데드라인이 있음
    • 최근에는 조금 완화된 개념으로 사용되고 있음

      • Hard realtime system (경성 실시간 시스템)

        • 데드라인을 정확히 지키지 않으면 치명적인 결과가 나오는 시스템 (반도체 공정 같은)
      • Soft realtime system (연성 실시간 시스템)

        • 데드라인은 있지만 지키지 않아도 큰 문제는 없는 시스템
          • ex) 영화를 보기 위해서는 초당 24프레임을 읽어와서 디코딩을 해야 함. 이 데드라인을 지키지 못하면 영화가 끊김. 이 경우 데드라인을 지키지 못하면 사용자의 만족도가 낮아지긴 하지만, 치명적인 결과를 초래하지는 않음
          • 현대의 스마트폰 등은 영화 Application이 있지만, realtime OS를 사용하고 있지는 않음
            • time sharing OS 위에서 돌아가고 있음
            • 스마트폰에서 데드라인이 필요한 기능이 많이 생김
              • 내비게이션, 블랙박스 등 실시간성을 필요로 하는 응용 프로그램의 증가
            • 이러한 실시간성을 지키기 위해서는 범용 OS가 어떻게 하면 되겠는가? <- 이런것들이 연구 주제가 되곤 함

용어 정리

  • multitasking
    • 일반적인 용어
    • task가 동시에 여러개 돌아가고 있음
    • 엄밀히 말하면 CPU는 매 순간 1개의 프로그램만 실행함
    • 짧은 시간간격으로 분할, 할당하기 때문에 동시 실행되는 것처럼 보임
    • 하나의 프로그램이 끝나기 전에 다른 프로그램이 실행 가능한 경우를 일반적으로 multi-tasking이라고 부름
  • multiprogramming
    • 메모리에 여러 프로그램이 동시에 올라가는 방식을 multi programming이라고 함
    • multi-tasking이 되려면 당연히 메모리에 여러 프로그램이 동시에 올라가야 하지만, 특별히 메모리 측면을 강조한 것
  • time sharing
    • CPU의 시간을 분할하여 나누어쓴다는 의미를 강조한 것
  • multiprocess
    • 위와 비슷한 용어
    • process = 실행 중인 프로그램
  • ↔️ multiprocessor
    • 하나의 컴퓨터에 CPU(processor)가 여러 개 붙어있음을 의미
    • processor = CPU = 처리기
    • multi-tasking이 당연히 지원될 것
    • CPU가 여러개 있어야 한다는 점에서 하드웨어적으로 다른 시스템임

운영체제의 예

UNIX

  • 대형 컴퓨터를 위해 만들어진 운영체제
  • multi-tasking, multi-user 지원
  • unix 운영체제를 만들기 위해 아예 프로그래밍 언어를 새로 만듦 : C언어
    • UNIX 운영체제 코드의 대부분을 C언어로 작성
      • 어셈블리어로 코드를 작성하기 어려웠기 때문
      • C언어는 기계어와 가까운 언어임
  • 초창기에는 소스코드를 공개함
    • 누구나 가져다 쓰기 쉬움
    • 프로그램 개발에 용이
    • 일반인이 초기에 배우기에는 약간 어려움
  • 높은 이식성
    • 하나의 컴퓨터에서 돌아가는 unix를 기계어집합이 다른 컴퓨터에 이식하기 쉬움
  • 최소한의 커널 구조
    • 커널 : 메모리에 상주하는 핵심 부분
    • 커널의 크기를 작게 만들어서 메모리에서 운영체제가 차지하는 부분을 작게 함
      • 핵심 기능만 커널에 넣음
      • 확장성이 높음
  • 다양한 버전
    • System V, FreeBSD, SunOS, Solaris
    • Linux
      • 개인이 쓰기에도 좋은, 여러 환경에서 사용 가능
      • Android의 운영체제 커널

MS 계열

  • 개인용 컴퓨터를 위해 만들어진 운영체제
  • single-user, single-tasking 지원하는 것으로 출발함
  • DOS
    • 단일 작업용 운영체제
    • 640KB의 메모리 크기 지원
      • → 메모리 관리 능력의 한계!
      • 누더기가 됨
  • MS Windows
    • 불안정성 → 이제는 해결된 것 같음

기타

  • ios 등이 나오면서 운영체제가 여러 형태로 발전하는 중

운영체제의 구조

CPU 스케줄링

  • 어떤 프로그램에 CPU를 할당할 것인가?
    • 일반 사회에서는 선착순이 공정하다고 인정되는데, 왜 CPU는 그렇지 않은가?
      • 컴퓨터에서는 천문학적인 시간차가 발생함
        • Disk <<<< Memory <<< CPU 속도 차이 너무 많이 남
        • 시간 차이를 완충하고, 주어진 자원의 특성을 최대한 활용하는 관리 방식 필요
    • CPU를 짧게 쓰는 Task에 먼저 CPU를 주면 전체적인 만족도가 높아짐
    • 줬다 뺏었다 하는 방식을 주로 많이 씀

메모리 관리

  • 메모리 공간은 한정되어 있는데, 어떤 프로그램에 메모리를 얼만큼 할당할 것인가? 메모리가 꽉찼을 때 어떤 것을 쫓아내야 하는가?
    • 1/n은 적절하지 않음
      • 메모리를 많이 필요로 하는 프로그램에 메모리를 많이 주는 게 좋을 수도 있음
      • 프로그램 수가 많으면 각각의 메모리 공간이 너무 작아짐 → CPU가 프로그램 실행하려 했는데 필요한 부분이 메모리에 없음 → Disk에서 읽어와야 함 → 원활한 실행 안됨
        • 즉, CPU에서 원활하게 실행되기 위해서 필요한 정도의 메모리는 할당되어야 함
        • Working Set model : 적당량의 프로그램만 메모리에 올리고 나머지는 Disk로 쫓아내는 느낌. 어느정도 실행되고 나면 다시 Disk에 있는 애들 메모리로 올림.
    • 미래에 사용할 것들은 최대한 놔두고 그렇지 않은 것들은 밀어낸다.

파일 관리

  • 디스크에 파일을 어떻게 보관할 것인가?
    • 조각으로 나누어서 관리 / 연속적으로 관리 등
    • Disk에서 파일에 접근하려면 Disk 내의 Head가 움직이면서 파일을 읽어야 하기 때문에, 메모리와는 상당히 다름
      • 따라서 특성에 맞게 파일을 관리해야 함
    • Disk에도 스케줄링이 필요함
      • Disk에 들어온 요청들을 어떤 순서로 처리할 것인가?
        • head에 가까운 요청이 있다면 그것을 먼저 처리하는 것이 성능이 좋을 것
        • 엘리베이터 스케줄링과 유사함
          • 먼저 온 것을 먼저 처리하는 것이 반드시 좋지는 않음
    • CPU와는 사뭇 다른 문제
      • CPU는 너무 빠르기 때문에, 이 좋은 자원을 어떻게 활용할 것인가? 에 대한 이야기임
      • 디스크는 Head가 움직이기 때문에, 어떻게 하면 움직임을 최소화 할 것인가? 에 대한 이야기임

입출력 관리

  • IO 디바이스를 어떻게 관리할 것인가? 각기 다른 입출력장치와 컴퓨터 간에 어떻게 정보를 주고 받게 할 것인가?
    • I/O 디바이스는 컴퓨터 내부의 CPU, memory, Disk에 비해 많이 느림
    • I/O와 컴퓨터 내부가 교신하면서 처리해야 하는데, 워낙 느리다보니 정보를 주고받는 것이 중요한 이슈가 됨
      • 기본적으로 Interrupt라는 것으로 관리함
        • I/O 디바이스가 CPU에게 알려주어야 하는 것이 있으면 Interrupt를 걸어서 CPU에게 알려줌
        • CPU는 다음 작업을 하기 전에 이를 처리해줌
        • CPU가 최대한 방해받지 않도록 하는 것이 목적

프로세스 관리

  • 컴퓨터 내에서 돌아가고 있는 프로그램들을 어떻게 관리할 것인가?
    • 자원 할당 및 반환

기타

  • 보호 시스템
  • 네트워킹
  • 명령어해석기 등


참고 링크

KOCW 운영체제 - 이화여대 반효경 교수 (2014-1) 2강

profile
개발 취준생

0개의 댓글