OS, Process, Algorithm

in #os7 years ago

운영체제

linux, MacOS, windows, ios, etc.

"왜 탄생하였나?"

공통으로 사용하는 하드웨어와 소프트웨어를 운영하는 프로그램이 필요하게 되었다.

커널 - 뼈대

운영체제


<li><strong>시스템 하드웨어 관리</strong></li>

사용자 프로그램의 오류나 잘못된 자원 사용을 감시
입출력 장치 등의 자원에 대한 연산과 제어를 관리

<li><strong>가상시스템 서비스 제공</strong></li>

사용자에게 컴퓨터의 프로그램을 쉽고 효율적어로 실행할 수 있는 환경 제공

<li><strong>자원관리</strong></li>

컴퓨터 시스템 하드웨어 및 소프트웨어 자원을 여러 사용자 간에 효율적 할당, 관리, 보호

프로세스관리


프로세스마다 얼만큼의 자원을 사용할 것인가 결정하는 것

비선점 스케줄링 (Non-Preemptive)

할당된 cpu를 다른 프로세스가 강제로 뺏어 사용할 수 없는 기법
한번 cpu를 할당받으면 작업이 완료될 때까지 cpu를 사용
문제점: 짧은(중요한)작업이 긴 작업을 기다리는 경우 발생

종류:
FCFSM SJF, HRN, Deadline(기한부)
FCFS(First Come First Served)
FIFO

<li><strong>SJF(Shortest Job First)</strong></li>

짧은거 먼저 프로세싱

평균대기시간 가장 적은 알고리즘

정확한 처리시간을 알 수 가 없고, 처리측정하는 비용도 발생

  • Deadline
  • 일정시간동안 프로세스 완료하는 기법

    제한시간 완료안될 경우 제거되거나 처음부터 다시 실행
    스케줄링이 복잡해지며, 프로세스 실행시 집중적으로 요구되는 자원관리에 요구되는 자원관리에 오버해드가 발생

  • Priority Based Scheduling(우선순위)
  • 프로세스마다 우선순위 부여

    우선순위가 동일한 경우 FCFS기법으로 할당

    가장 낮은 순위를 부여받은 프로세스의 무한연기 발생가능

    Preemptive(선점 스케줄링)

    우선순위가 높은 프로세스가 강제로 cpu를 빼앗아 사용할 수 있는 기법
    대화식 시분할 시스템(Time Sharing System)
    단점-많은 오버헤드, 인터럽트용 타이머클럭 필요
    종류:
    RR(Round Robin), SRT, 선점 우선순위, 다단계 큐(MQ), 다단계 피드백큐(MFQ)

    • Multy Queue Scheduling
    • 프로세스를 특정 그룹으로 분류할 수 있을 경우 그룹에 따라 각기 다른 준비단계 큐 사용
      준비상태 큐 마다 다른 스켇줄링 기법 사용가능
      다른 준비상태 큐로 이동불가
      하위단계 준비

      주기억장치관리


      <li>단순관리</li>
      <li>가상메모리</li>
      

      보조기억장치를 주기억장치처럼 활용

      파일관리


      응용프로그램 운영체제 보조기억장치

      파일 입출력 요청 파일 입출력 처리

      * 파일시스템

      unix - unix file system

      linux - 확장 파일 시스템, ZFS, XFS...

      mac os - HFS, HFS+...
      (조각모음이 없다)

      windows - FAT, NTFS

      커널


      applications, kernel, cpu/ memory/ devices
      
      커널 : 운영체제의 핵심 - 파일을 읽고, 쓰고, cpu를 관리하고...등등

      알고리즘


      문제해결을 위한 절차/방법

      ex) 테트리스를 잘 쌓으려면? - 옮긴다, 회전시킨다

      ex) 여행가방을 꾸리려면? - 꺼내기 쉽게, 자주 쓰는 것, 부피에 맞게..

      자료구조


      한정된 공간에 자료를 효율적으로 이용할 수 있는 방법론

      데이터를 구조적으로 표현하는 방식

      ex)테트리스 - 빈틈이 안생기도록 옮기는게 알고리즘, 빈틈이 안생길만한 네모난 모양의 블럭으로 준비하는게 자료구조

      ex)여행가방 - 가방에 맞게 짐(옷,충전기 등)을 규격화하는 것

      원시구조
      선형구조
      배열

      배열(신발장)은 데이터(학생)가 빠지더라도(전학) 배열을 줄이거나 늘릴 수 없다.
      데이터를 설명하지 않아도 배열의 주소만 알면 찾아갈 수 있다.

      연결리스트 (linked list)


      단순 연결리스트 - 중간에 데이터가 빠지면 다음데이터에게 순서를 부여

      • 배열을 메모리 공간상에 연속된 주소로 자원을 할당받음
        • 링크드 리스트는 한 노드에 데이터와 주소가 있어서 각 노드가 서로 맞물려서 자료를 저장
        • 배열은 접근속도가 빠르지만 삭제와 삽입의 작업이 번거로움 (새로 생성시켜서 통짜로 옮겨야 함)
        • 링크드 리스트는 노드를 추가하거나 빼는 것이기 떄문에 노드의 삽입/삭제가 용이함
        • 접근 속도는 느림 (첫 노드부터 원하는 노드까지 하나하나 거쳐가야 함)
        • 희소행렬을 링크드 리스트로 표현하면 메모리가 절약된다고 함
          ※ 희소행렬? 행렬의 값이 대부분 0으로 되어 있는 행렬 (그와 반대되는 표현으로는 밀집행렬(dense matrix), 조밀행렬이 사용된다. 개념적으로 희소성은 시스템들이 약하게 연결된 것에 해당한다)

      이중 연결리스트 - 다음데이터 뿐만 아니라 앞데이터에게도 순서를 부여

      원형 연결리스트 - 마지막데이터와 처음데이터를 연결

      ex) NSArray

      STACK

      • 리스트의 한쪽 끝으로만 자료의 삽입 및 삭제가 이루어지는 자료구조

      • 먼저 넣은 데이터를 나중에 꺼내는 방식 (LIFO)

      • 서브 프로그램 호출시 복귀주소를 저장할 때

      • 함수 호출 순서를 제어할 때

        • 인터럽트가 발생하여 복귀주소를 저장할 때
        • 후위표기법으로 산출된 산술식을 연산할 때
        • 0 주소 지정방식 명령어의 자료 저장소
        • 재귀 프로그램(Recursive Program)의 순서를 제어할 때
        • 컴파일러를 이용한 언어 번역 시

      Queue


      • 선형 리스트(Linear List)에서 한쪽에서는 삽입이 이루어지고 다른 쪽에서는 삭제가 이뤄지도록 구성한 자료구조

        • FIFO방식으로 처리
      • 순서를 기다리는 류의 프로세스 처리 예) 대기행렬

        • 운영체제의 작업 스케줄링


      Dequeue

      • 삽입과 삭제가 양쪽 끝에서 모두 발생할 수 있는 자료구조
      • Stack과 Queue의 장점만 따서 구성되어 있음

        double-ended queue

      TREE


      • Node와 Branch를 이용하여 사이클을 이루지 않도록 구성한 Graph의 특수한 형태
      • 족보, 연산 수식, 조직 구조도 등을 표현하기에 적합함

      Graph


      • 사이클이 있을 수 있는 정점(Vertex)과 간선(Edge)으로 이루어진 자료구조
      • 사이클이 있을 수 있다는 것이 트리와 다름

      알고리즘


      정렬 알고리즘


      정렬 알고리즘 비교 영상

      <li>선택정렬(selection) - 다 읽어들인 후 제일 작은 것부터</li>
      <li>버블정렬(bubble) - 옆에 애랑 비교후 큰애를 뒤로</li>
      <li>삽입정렬(insertion) - 두값을 비교해서 사이에 넣는 것</li>
      <li>병합정렬(merge) - 구간을 나눠서 정렬 후 합치는 것</li>
      <li>퀵정렬(quick) - 중간기준을 잡아서 반반 나눠서 크고 작은 것으로 구분. 평균적으로 가장 빠름. 기준을 잘못잡으면 항상 빠르진 않음</li>
      

      춤으로 보는 정렬

      시간복잡도

      <li>알고리즘이 실행되는데 걸리는 시간 분석</li>
      <li>점근 표기법 (대문자 O표기법)</li>
      

      정렬 알고리즘의 시간복잡도

      선택 - O(n^2)
      버블 - O(n^2)
      삽입 - O(n^2)
      병합 - (nlogn)
      퀵 - (nlogn)

      탐색 알고리즘의 시간복잡도

      선형탐색 - O(n)
      이진탐색 - O(logn)