Researcher to Developer

Operation System - OS.운영체제 본문

코딩/Basic

Operation System - OS.운영체제

Probe29 2020. 12. 8. 01:53

# 운영체제

컴퓨터 사용자와 컴퓨터 하드웨어 간의 인터페이스로서 동작하는 시스템 소프트웨어의 일종

하드웨어 및 응용 프로그램이 요청하는 시스템 Resource를 효율적으로 분배하고, 관리하는 소프트웨어

 

# 컴퓨터를 켜면 운영체제는 Memory 위에 올라간다.

   참고 : 폰노이만 구조 - 모든 프로그램=software는 Memory에 올라가고 CPU에 던져 지면서 실행된다. 

 

# 운영체제의 목적

 1. 처리능력
 2. 응답시간  

 3. 신뢰도

 4. 사용 가능도

 

운영체제의 목적은 처리능력의 향상, 응답시간의 최소화, 신뢰도의 향상, 사용 가능도의 향상

 

 

# 운영체제의 역할

 1. 사용자에게 Software를 쉽고 효율적으로 실행할 수 있는 환경을 제공한다.

 2. 시스템 자원(System resource=하드웨어) 관리자

      * 응용 프로그램에 무한 반복문을 넣었다. → 비정상적인 동작을 하는 프로그램을 막는다. 
      * 응용 프로그램을 잘못 작성해서, 프로그램이 다운 → 비정상적인 동작을 하는 프로그램을 막는다. 
      * 모든 파일 삭제 막기 (권한/사용자 관리) 등과 같은 관리

 3. 사용자와 컴퓨터의 커뮤니케이션 지원

      * 사용자가 하드웨어(System resource)에게 명령을 내릴 수 있는 수단 OS

 4. 프로그램(=Application 등등)을 제어, 관리함으로서 프로그램의 오류나 잘못된 자원 사용을 감시하거나, 입출력 장치      등의 자원에 대한 연산과 제어를 관리한다.

 

 

# 운영체제의 종류

Windows OS : 가장 친숙하고 표준적인 GUI를 제공

Mac OS

LINUX(UNIX) OS : 커널의 한 종류(가장 현대 운영체제 기술을 최초로 구현한 OS)

   * UNIX와 사용법이나 OS구조가 유사하며, 인터넷 서비스를 구동시키는 서버 환경에서 대부분 LINUX 사용                  프로그래머나 전공자라면 반드시 사용법을 알고 있어야한다.

 

 

# 운영체제 내부 여러 세부적인 기능 (하드웨어와 프로그램을 효율적으로 제어하기 위한 OS 기술)

 1. 프로세스, 주 기억장치, 입출력장치, 파일 및 정보 등의 자원을 관리

    * 프로세스의 생성과 삭제, 자원 할당 및 반환

    * CPU를 얼만큼 나눠줄까??, 한정된 메모리를 어떻게 나눌까??

 2. 자원을 효율적으로 관리하기 위해 자원의 스케줄링 기능을 제공

 3. 사용자와 시스템간의 편리한 인터페이스를 제공 

    * 윈도우 바탕화면과 같은 User Interface 제공, 덕분에 마우스와 클릭만으로도 프로그램 실행, 하드웨어 장치 연결

 4. 시스템의 각종 하드웨어와 네트워크를 관리, 제어

 5. 시스템의 오류를 검사하고 복구

 6. 자원 보호/보안 기능을 제공

 7. 입출력 관리

    * -I/O 장치가 입출력을 요청하면 Interrupt를 발생 시켜 처리한다.

 8. 디스크 관리

    * 디스크에 파일을 어떻게 보관하지??

 9. 여러 응용 프로그램 중 특정 시간에 어떤 응용 프로그램을 실행시킬지를 관리한다.

 

 

 # 컴퓨터 하드웨어는 스스로 할 수 있는 것이 없다.

  - CPU : 각 프로그램이 얼마나 CPU를 사용할 것인지 CPU 자체가 결정할 수 없다.

  - Memory : 각 프로그램 특정한 주소의 데이터를 써주세요, 이런 명령을 수행하는 장치가 Memory이지 각 프로그램                      이 어느 주소에 저장되어야 하는 지, 어느 정도의 메모리 공간을 확보해주어야 하는지 결정할 수 없다.

  - 저장매체(HDD, SSD) : 어떻게, 어디에 저장을 해야하는 지 결정할 수 없다.
  - 키보드/마우스 : 마우스 포인터가 어떻게 움직여야 하는지 결정할 수 없다.

 

 위와 같은 결정을 OS가 내려준다!

 

 

 

# 운영체제의 구성

 1. 제어 프로그램 : 컴퓨터 정보들과 자원들을 제어하고 상태를 감시하고 실행하는 과정을 지시하고 관리함

 2. 처리 프로그램 : 제어 프로그램의 지시를 받아서, 실제로 데이터 처리를 실행하고 결과를 보여주는 처리 프로그램

 

 

# 운영체제는 사용자에게 인터페이스 제공

 - 인터페이스는 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고 받게 해주는 시스템이다. 즉, 사용자가       기기를 쉽게 동작시키는데 도움을 주는 시스템을 의미한다.

 

# Shell (=software)

    * 사용자가 입력하는 명령어를 기계어로 변역하여 커널에 전달하는 역할을 하는 명령어 해석기

    * 사용자가 운영체제 기능과 서비스를 조작할 수 있도록 인터페이스를 제공하는 프로그램

    * Shell이라는 이름은 사용자와 운영 체제의 내부(커널) 사이의 인터페이스를 감싸는 층이란 의미

    * Unix, Linux,  Window 등 여러 운영체제에는 Shell이 반드시 존재(명령 프롬프트 - windows CLI, 배시 - UNIX)

 

#CLI

명령 줄 Shell은 운영 체제 상에서 명령 줄 인터페이스(CLI)를 제공

CLI Shell 상에서 일반적인 수행(파일 이동 등)을 빠르게 할 수 있다. 성능을 중시하고, 숙련된 관리자의 작업에 주로 사용

 

#GUI

그래픽 Shell은 그래픽 사용자 인터페이스(GUI)를 제공한다.

GUI Shell의 상대적 사용성과 간편함을 주장, 일상적인 업무에 많이 사용

 

 사용자 → App,Shell → OS, Kernel → 하드웨어  OS  App  사용자

 

 

# 커널(Kernel)

    * 운영 체제의 핵심이 되는 프로그램의 하나, 운영 체제의 다른 기능 및 응용 프로그램 수행에 필요한 여러 가지 서비        스를 제공한다.

 

 

# 커널의 역할

 1. 하드웨어와 프로세스의 보안

 2. 한정된 시스템 자원을 효율적으로 관리하여 프로그램 실행을 원활하게 한다. 

   * 프로세스에 처리기를 할당하는 것을 스케줄링이라함

 3. 일반적으로 커널은 운영 체제의 복잡한 내부를 감추고 깔끔하고 일관성 있는 인터페이스를 하드웨어에 제공하기 위해 몇 가지 하드웨어 추상화(같은 종류의 장비에 대한 공통 명령어의 집합)들로 구현된다.

 

뿐만 아니라 다음과 같은 역할도 수행

 

    * 일반인이 일반적으로 보지 못하는 낮은 수준의 프로세스를 제어

    * 얼마나 메모리를 읽고 쓸 것인가?

    * 어느 프로세스를 진행할 것인지

    * 입출력 장치를 통해 어떠한 정보를 주고 받을 것인지,

    * 네트워크를 통해 받은 정보를 어떻게 해석할 것인지를 제어

 

 

 

# UI(사용자 인터페이스)

사용자가 직접 프로그램을 제어하고 사용할 수 있게 하는 운영체제의 기능

 

 

# API(Application Program Interface)

응용 프로그램에서 사용 할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스, 응용 프로그램이 다른 프로그램과 상호 작용할 수 있게 하는 매개체.

 

 

 

 


# 운영체제는 응용 프로그램을 위해서도 인터페이스를 제공(커뮤니케이션) 
 - 프로그램 언어로 가능하다. (Code) 
 - API(Application Programming Interface) 형태로 응용 프로그램를 위한 interface를 제공한다. 
    API 형태는 함수로 제공 
 - 운영체제를 사용할 수 있는 함수가 있음   
 - 보통은 라이브러리 형태로 제공 (ex. python) 
   C Library(glibc) 

 API는 함수의 집합, 요청서의 집합 
 API없이는 운영체제에 요청할 수 있는 방법이 없다. 


# 운영 체제는 커널 모드와 사용자 모드로 나뉘어 구동된다.

- 운영 체제에서 프로그램이 구동되는데 있어 파일을 읽어 오거나, 파일을 쓰거나, 혹은 화면에 메시지를 출력하는 등 많은 부분이 커널 모드를 사용한다. 

- 시스템 콜은 이러한 커널 영역의 기능을 사용자 모드가 사용 가능하게 해준다.

- 즉, 프로세스가 하드웨어에 직접 접근해서 필요한 기능을 사용할 수 있게 해준다.

 

 

 

 

 

# 시스템 콜
응용 프로그램에서 운영 체제에게 어떠한 기능(system resource)을 수행해달라고 하는 수단

응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스

사용자 모드에 있는 응용 프로그램에서 커널의 서비스(커널 모드)를 사용하게 하는방법이 시스템 콜이다.

운영체제는 운영체제 각 기능을 사용할 수 있도록 시스템 콜이라는 명령 또는 함수를 제공한다. 

API 내부에는 시스템 콜을 호출하는 형태로 만들어지는 경우가 대부분 
시스템 콜 사용법이 복잡 하기 때문에 API형태로 각 언어 별로 운영체제에 기능을 요청할 수 있는 인터페이스를 제공 
결국 각각의 API 내부에는 시스템 콜을 통해서 운영체제 기능을 이용하는 것 
라이브러리 - API를 묶어둔 것 

 

보통 C나 C++과 같은 고급 언어로 작성된 프로그램들은 직접 시스템 콜을 사용할 수 없기 때문에, 고급 API를 통해 시스템 콜에 접근하게 하는 방법이다.

 

 

# 시스템 콜의 세 가지 기능

 1. 사용자 모드에 있는 응용 프로그램이 커널의 기능을 사용할 수 있도록 한다.

 2. 시스템 콜을 하면 사용자 모드에서 커널 모드로 바뀐다.

 3. 커널에서 시스템 콜을 처리하면 커널 모드에서 사용자 모드로 돌아가 작업을 계속한다.

 

 

 

 

 



# 시스템 콜의 유형 
 1. 프로세스 제어 Process Control 
 2. 파일 조작 File Manipulation 
 3. 장치 관리 Device Management 
 4. 정보 유지 Information maintenance 
 5. 통신 communication 

프로그램 언어를 배울 때 
API 사용 법을 익히는 것 

운영 체제 사용 법을 익힐 때 
Shell의 사용 법을 익히는 것 

API 안에 시스템 콜이 있는 것 

Shell을 만들려면 API가 필요하고 API를 만들려면 시스템 콜이 필요 


# 운영체제를 만든다면?? 
 1. 운영체제를 개발한다. (핵심 운영체제의 기능을 가진 소프트웨어 - Kernel) 
 2. 시스템 콜을 개발 (OS 기능 제공) 
 3. 예를 들어 C언어로 Shell을 만들겠다. C형태로 API 를 만들어야함. 
 4. 그래야 3번을 가지고 Shell을 만든다. 
 5. Application 개발 
  
# OS와 System call 
 시스템 콜 정의 하는 문서의 예 : POSIX API, Windows API(UNIX 계열의 OS들은 대부분 이 시스템  
   콜 을 따르고 있음)  
 리눅스도 POSIX API로(리눅스는 C언어로 되어있음) 
 맥 OS는 내부 명령들은 UNIX 계열 OS와 유사 - POSIX API를 기반으로   

시스템 콜 : 운영 체제 기능을 호출하는 함수 
API : 각 언어 별 운영 체제 기능 호출 인터페이스 함수 

 

운영 체제는 컴퓨터 하드웨어와 App을 관리한다.
응용 프로그램이 운영 체제기능을 요청하기 위해서, 운영 체제는 시스템 콜을 제공한다. 보통 시스템 콜(C언어)을 직접 사용하기 보다는, 해당 시스템 콜을 사용해서 만든 각 언어 별 라이브러리(API)를 사용한다. 
   

 


# 운영체제와 응용 프로그램의 관계

 - 운영체제는 응용 프로그램을 관리 

    * 응용 프로그램을 실행시킨다.

    * 응용 프로그램사이의 권한을 관리해준다. (해당 프로그램이 많은 기능을 쓸 수 있는 관리자 권한으로 실행)

    * 응용 프로그램을 사용하는 사용자도 관리 - 로그인

 

# 응용 프로그램 (Application=App=User program)이란

Program = Software = OS, 응용 프로그램

응용 프로그램은 OS 위에서 작동!

 

# 응용 프로그램, 운영체제, 컴퓨터 하드웨어 관계 
 - OS는 응용 프로그램이 요청하는 메모리를 허가하고, 분배한다. 
 - OS는 응용 프로그램이 요청하는 CPU를 제공한다. 
 - OS는 응용 프로그램이 요청하는 IO Device 사용을 허가/제어한다.

 

# 사용자, 응용 프로그램, OS, 컴퓨터 하드웨어 관계 
 사용자 → App,Shell → OS, Kernel → 하드웨어  OS  App  사용자

" 사용자가 Application 실행 요청을 하면, Application이 OS에 System resource을 실행을 하기 위해 요청을 하게 되고 OS가 하드웨어에서 System resource를 Application에 빌려주는 것"

 

# Software

컴퓨터 시스템을 효율적으로 운영하기 위해 개발된 프로그램의 총칭

 

# Hardware

CPU, Monitor, Graphic, Memory, Main board 등과 같은 물리적 부품

 

# 하드웨어의 종류

 - CPU 중앙처리장치

 - Memory(RAM, DRAM)

 - I/O Device 입출력장치(Monitor, Mouse, Keyboard ...) 

 - 저장매체(SSD,HDD) 

     * 저장매체의 특징 - 컴퓨터를 꺼도 데이터가 보관된다.

     * OS는 저장매체에 설치된다.


 

# 운영체제는 많은 기술이 연결되어 있어서, Bug가 발견될 확률이 높아 만들기가 쉽지 않다.

'코딩 > Basic' 카테고리의 다른 글

01. 프로세스와 스케쥴러 4  (0) 2020.12.14
01. 프로세스와 스케쥴러 3  (0) 2020.12.13
01. 프로세스와 스케쥴러 2  (0) 2020.12.10
01. 프로세스와 스케쥴러 1  (0) 2020.12.10
Operation System - OS.운영체제 2  (0) 2020.12.09