ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [운영체제] 운영체제 역사와 기초 (20201228 스터디)
    개발공부/운영체제 2020. 12. 28. 14:09

     운영체제란?

     컴퓨터 자원을 관리하고 쉽게 사용하도록 지원하는 시스템 소프트웨어이다. 운영체제가 없다면 응용프로그램이나 사용자는 직접 하드웨어를 제어해야하며, 자원에 대한 충돌 해결, 성능 최적화, 사용자의 시스템 사용의 효율화를 위해 운영체제가 필요하다.

     자원하드웨어 자원(CPU, 메모리, 그래픽 장치, 키보드 등등)과 소프트웨어 자원(컴퓨터 내에 작성되어 저장된 프로그램들, 데이터 파일, 데이터베이스)로 나눠진다. 자원의 관리는 자원에 대한 사용 혹은 접근에 대한 허용/금지, 여러 사용자나 프로그램이 자원 사용을 경쟁할 때 조율하며, 자원의 유혹 시간을 줄이고, 빠른 시간 내에 자원이 효과적으로 활용되는것으로 총체적인 제워를 목적으로 둔다.

     

    운영체제는 커널 + 툴 + 디바이스 드라이버로 이루어져 있다.

     1. 커널 : cpu, 메모리 등 자원에 직접 제어, 관리하는 코드들의 집합.

     2. 툴 : 사용자가 컴퓨터를 편리하게 사용할 수 있게 제공하는 툴

             윈도우에서는 바탕화면 GUI, 탐색기, 작업 관리자, 제어판, 테스크 관리자 등이 있다.
             리눅스에서는 shell 로그인 프로그램 등이 있다.

     3. 디바이스 드라이버 : 입출력 장치 직접 제어 및 해당 코드

     

     운영체제는 시스템 호출, 인터럽트 2개의 인터페이스를 제공한다.

     - 시스템 호출(System call) : 커널에서 제공하는 함수로 어플리케이션을 위한 인터페이스이며, 어플리케이션은 운영체제의 기능을 이용하려면 반드시 시스템 호출을 해야한다.  동기적으로 어플리케이션의 의도된 기계어 명령으로부터 발생한다.

     - 인터럽트(Interrupt) : 하드웨어 장치들을 위한 인터페이스로 컴퓨터 외부와 데이터를 입출력하는 과정에 CPU에 인터럽트를 걸어 데이터 입출력 요청 및 완료 통보를 한다. CPU는 발생한 인터럽트를 처리한 서비스를 루팅 실행하며, 인터럽트 서비스 루틴은 디바이스 드라이버에 구현되어 있다. 비동기적으로 장치로부터 발생한다.

     + 예외 : 동기적으로 잘못된 기계어 명령의 예상치 못한 실행에 의해 발생한다. 예로는 0으로 나누기 등이있다.

    인터럽트나 예외가 처리될때는 커널 모드로 변경되고, 인터럽트 핸들러나 예외 핸들러의 커널 코드를 실행한다.


    사용자와 운영체제

    • 컴퓨터 시스템은 사용자 + 응용소프트웨어 + 운영체제 커널 + 디바이스 드라이버 + 하드웨어로 정의한다.

    • 사용자가 하드웨어를 이용하는데 있어서 관계는 다음과 같다.

      사용자 <-> 어플리케이션 <-> 운영체제 <-> 컴퓨터 시스템 하드웨어

    • 사용자 <-> 운영체제

      사용자가 하드웨어에 관한 자세한 지식이 없어도 컴퓨터를 다룰 수 있게 하며, 컴퓨터 시스템을 사용할 인터페이스를 제공한다. ex) 마우스, 음성 명령 등

    • 하드웨어 <-> 운영체제

      하드웨어 제어는 운영체제만 가능하다. ex) printf("hello")를 화면에 hello로 출력하는 것 등

    • 어플리케이션 : 컴퓨터를 활용하는 다양한 프로그램
       운영체제에서 어플리케이션은 하드웨어를 직접 다루지 못하게 하며, 하드웨어를 사용하고자 할 때, 반드시 운영체제에게 요청을 해 대신 하드웨어를 조작한다. 또한 자원에 대한 충돌 관리나 서비스 프로그램(커널)이 있어 여러 어플의 요청을 처리한다.


    어플리케이션이 자원에 접근할 때

     

    라이브러리의 함수를 통해 접근하며 시스템 호출 함수, 표준 라이브러리 함수 2가지로 나뉘어진다.

     - 시스템 호출 함수 : 어플리케이션을 대신해 커널 함수를 호출 해 커널의 도움을 요청할 때

                             (운영체제마다, 언어마다 함수의 이름이 다르기 때문에..)
     - 표준 라이브러리 함수 : 라이브러리에 작성된 함수들은 필요에 따라 커널의 시스템 호출 함수가 실행되도록 한다.
     ex) fopen(), fread()등의 라이브러리 함수는 필요에 따라 다시 내부적인 open(), read()를 호출하여 파일 읽기를 운영체제에 요청한다. 이때 fopen, fread = 표준 라이브러리 함수, open, read = 시스템 호출 함수

     

     

    user level(user mode) 와 kernel level(kernel mode)

     

    CPU는 두 모드 중 한 상태로 프로그램을 실행한다.

    user level : 어플리케이션, 라이브러리 함수들 혹은 api

      -> CPU는 사용자 공간 영역에서 코드를 실행하며, 커널 코드 접근을 불허하고, 커널 영역이 어플리케이션으로부터 부호된다. 또한 특권 명령(하드웨어 접근) 사용을 불허한다.

     

    kernel level : 운영체제, 컴퓨터 시스템 하드웨어

      -> CPU가 커널 공간에서 커널 코드를 실행하며 특권 명령을 사용한다. 

                    

    사용자모드에서 커널 모드로 변경하는 방법 : 시스템 호출과 인터럽트 발생시 OR 커널 모드로 변경하는 특별한 기계어 명령을 사용한다.

     

    특권 명령어들 : I/O 명령어, Halt 명령어, 인터럽트 플래그 끄기, 타이머 설정, 컨텍스트 스위칭, 메모리 지우기, 장치 상태 테이블 수정 등

     

    사용자 공간과 커널 공간 : 운영체제는 컴퓨터의 전체 메모리를 두 공간으로 분리한다.

     - User address space (사용자 공간) : 모든 응용프로그램들이 나누어 사용하는 공간
     - Kernel address space (커널 공간) : 커널 코드가 사용하는 공간으로 디바이스 드라이버가 포함되어 있다. 
                                                 윈도우의 경우에는 사용자 공간에서 실행되는 디바이스 드라이버가 있다.

     

    ++

    더보기

    부팅 과정 (pg 45)

    1. 전원 or reset 버튼 ->
    2. cpu 실행 시작(전원이 들어왔을 때, 실행을 시작할 주소가 pc에 자동 세팅) ->
    3. rom 코드(부트 스트랩 코드)를 실행하여 부트 블록 읽어들이기
    • 컴퓨터 보드에는 해당 주소에 rom 설치, 이 rom을 bios(basic I/O system) rom 이라고 부름, cpu는 rom 프로그램을 실행하여 보드 테스트, cpu는 rom 프로그램을 실행하여 부트 블록을 메모리로 로딩하고 메모리로 점프 ->
    1. cpu는 부트 블록 코드 실행 (여러 파티션 정보를 분석하고 운영체제가 기록된 파티션에서 운영체제 코드 로딩) ->
    2. 제어를 커널로 이동

    운영체제의 세부 기능

    • 사용자 인터페이스 ui
    • 프로세스 관리 : 프로세스 스케쥴링, 프로세스 실행 시작, 프로세스 실행 중단
    • 메모리 관리 : 가상 메모리
    • 파일 시스템 관리 : 파일 생성, 디렉터리 구조 형성, 파일 입출력 등등
    • 입출력 장치 제어 : 디스크 읽기,쓰기 , 키보드 입출력, 프린터 제어,출력
    • 보안

     

    운영체제의 역사

    더보기

    1. 하드웨어 직접 조작(1940년대) - 전자식 디지털 컴퓨터가 만들어지기 시작하는 시대로 
    소프트웨어의  개념이 없고, 모든 것이 하드웨어로 제작했다. 운영체제에 대한 개념이 없었다.
     프로그래머는 2진수 기계어로 된 프로그램을 작성했으며, 한 줄로 늘어선 기계 스위치로 비트를 입력했고, 프로그래밍은 기계 스위치의 조작과 전선의 직접 연결했다.
     고정 프로그래밍 방식 - 배선판에 전선을 연결하여 프로그램을 기계에 고착시키는 방식으로 하나의 명령을 만들기 위해 여러 가닥의 전선들을 연결한다. 프로그램 전체를 구축하기 위해서는 수천 개의 전선을 연결한다.
     ex) eniac 컴퓨터 - 방 하나를 메울 크기의 진공관 약 1800개로 구성

     2. 내장 프로그래밍 방식(1950년대) - 1945년 폰노이만에 의해 제안
     EDVAD 컴퓨터를 만들 때 적용 ~ 오늘날
     내장 프로그램 컴퓨터란? - cpu와 메모리를 분리한 구조로 소프트웨어와 하드웨어가 분리되었다. 실행할 프로그램을 메모리에 담고. cpu가 프로그램을 실행하는 방식이다. 펀치카드에 구멍을 뚫어 프로그램을 작성하며, 그 당시에는 개발자가 곧 운영자였다. 
     ex) IBM 7011 - 개발자의 업무가 프로그램 작성뿐 아니라 컴퓨터의 작동, 프로그램 실행도 포함되었다. 프로그램을 읽어들이는 로드 프로그램(로더)이 함께 필요했으며, 작성할 때마다 반복적으로 로더를 작성하는 시간낭비가 있었고, 모든 컴퓨터에 공통적으로 필요했다. 그러한 이유로 이후에 로더의 개념이 운영체제로 발전되었다.
     
     3. 원시적인 GM OS 개발(1955년) - IBM701의 고객이던 GM(General Motors)이 개발했다.
     펀치 카드에 담긴 프로그램을 메모리에 로더하는 로더 프로그램을 개발했고, 로더를 테이프에 저장, 필요할 때마다 실행했다. (로더를 모니터라고 불렀음)
     사용자 프로그램을 읽어 실행시켜준다는 점에서 원시적인 최초의 운영체제라고 할 수 있다.
     
     4. 최초의 운영체제 GM-NAA I/O 개발 (1956~1957년)
     1955년에 처리 속도를 높여 IBM704를 주문했고, 704 컴퓨터 활용에 문제점을 발견 했다.
     문제점으로는 개발자들은 대기 번호를 뽑고 자신의 차례를 기다려야 했던점과 비싼 컴퓨터를 많은 시간 놀게하고 있다는 점, 카드리더기나 테이프 리더기를 제어하는 입출력 코드와 하드웨어 서비스 루틴은 개발자가 별도로 알아서 작성해야만 했다는점이 있다.
     문제점을 통한 GM-NAA I/O 개발 - 1956년 고가의 컴퓨터를 보다 효율적으로 사용하기 위해 701의 모니터 프로그램을 확장했다. 여러 개발자들이 작성하여 쌓아놓은 작업들을 순서대로 하나씩 자동으로 메모리에 로딩하고, 한 번에 하나의 작업만을 실행해주는 배치 운영체제이다.

     운영체제와 컴퓨터 하드웨어의 진화
      - job-by-job processing (1950년대 초반) - 프로그래머가 컴퓨터를 독점 사용, 다음사용자 사용 
      - 배치처리(batch processing) (1950년대 후반) - 컴퓨터가 빨라지고 비싸지게 되어, 개인 독점은 비용 증가의 요인이 되어 컴퓨터 idle 시간을 최소화하고, 잡을 쌓아놓고 한번에 하나씩 연속적으로 잡을 처리한다.
      - executive system - 컴퓨터가 복잡해지고 입출력 장치 관리 기능이 강화되었다. 컴퓨터를 관리하는 executive system 개발, 메모리에 상주하고 입출력 제어를 한다. 또한 과금, 실행 시간에 대한 제약 등의 서비스를 도입했다.
      - 다중 프로그래밍 운영체제(Mutiprogramming) (1960년대 중반) - 시스템이 커지고 빨라짐에 따라 입출력 병목 현상이 증가되었고, 컴푸터 시스템의 throughput(단위시간당 잡 처리율)을 증가 시키기위해, 멀티프로그래밍 도입(동시에 여러 잡 실행 기반, 하나의 잡이 입출력을 대기하는동안 다른 잡을 cpu가 실행)
      - 시분할 시스템(1960년대 후반) - 산술 계산에서 다양한 타입의 데이터 처리로 컴퓨터의 활용이 변경되었다. 대화형 처리가 늘고, 데이터를 저장하고 다루는 환경으로 변화했다.
      - 가상메모리와 가상 기계 (1970년대 초반부터)

Designed by Tistory.