[OS] Operating System Overview

메르센고수·2024년 3월 16일
0

Computer Science

목록 보기
2/11

Operating System Structure

1. Multiprogramming

: CPU가 불필요한 대기를 하지 않도록 하기 위한게 주 목적으로 궁극적으로는 효율성이 목적이다.

  • Code와 data를 적절히 배치하여 CPU가 쉬지 않고 일을 하도록 한다.
  • 전체 작업의 일부는 Memory에 저장을 한다. 그러나 Memory의 용량은 제한적이기 때문에 만약 용량이 부족할 경우 Virtual Memory를 사용한다.
  • 하나의 작업이 선택되고 Process Scheduling에 의해 실행된다.
    * CPU Scheduling : 여러 개의 Program이 있을 때 어떤 프로그램을 먼저 실행할지 프로그램 간의 순서를 결정하는 메커니즘
  • I/O 같이 프로그램을 멈춰야할 경우 OS가 interrupt와 같은 방식을 통해 다른 작업으로 전환시킨다.

2. Time Sharing (Multitasking)

: CPU가 사용시간을 나누어서 (공유해서) 동시에 여러 프로그램들이 조금씩 진도를 나가게 하여 Multitasking이 가능하도록 해준다.
(모든 프로그램에 대해 상호작용성 보장)
CPU switches jobs so frequently that users can interact with each job while it is running. Creates interactive computing

  • Response time은 충분히 작아야 한다. 그래야 사용자에게 multitasking이 진행중이라는 느낌이 들게 한다.
  • 각각의 사용자들은 메모리에 적어도 하나 이상의 실행중인 프로그램 (프로세스)가 있어야 한다.
  • 만약 여러 작업들이 동시에 실행될 준비가 되어 있다면 CPU scheduling을 통해 작업을 관리해주어야 한다.
  • 프로세스들이 memory에 적합하지 않다면 swapping을 사용하여 새로운 프로그램을 위한 공간을 마련해주어야 한다.
    * 하지만, Swapping으로 인해 속도가 느려진다는 단점이 존재한다.

3. Hardware에 의해 발생한 interrupt

4. Software에 의한 error나 exception이나 trap을 발생시키는 요청

: Division by zeroSystem call같이 급하게 기존 작업을 중지하고 먼저 처리를 해주어야하는 경우

5. Dual-mode operation

: User-modeKernel-mode로 나누어져 있으며 OS가 OS 자신과 다른 System 구성요소들을 보호하게 해준다.
이 때, Hardware에 의해 제공된 Mode bitUser-modeKernel-mode를 구분하게 해준다.

Process Management

Process

: Process의 경우 보통의 OS 책에서는 현재 실행중인 Program 이라고 많이들 알고 있다.
물론 이 말도 맞지만, 엄밀히 말하면 Process란 CPU, Memory, I/O, file, data 등을 하나로 묶기 위해 OS가 제공하는 data structure이다.

그렇기 때문에 OS는 process management를 위해 다음과 같은 활동들을 해야한다.

  • User와 System process의 생성 및 삭제
  • Process들의 중지 및 재개
  • Process synchronization (프로세스 동기화)를 위한 메커니즘 제공
  • Process communication을 위한 메커니즘 제공
  • Deadlock handling을 위한 메커니즘 제공

Memory Management

Memory management는 CPU 사용과 사용자에 대한 response time을 최적화할 때 어떤 것이 Memory에 있어야 하는지를 결정하는 작업이다. 이를 위해 Memory management는 다음과 같은 작업들을 한다.

  • Memory의 어느 부분이 현재 사용중이고 누가 사용중인지를 계속 추적해야한다.
  • 어떤 process와 data들을 memory에 넣고 꺼낼지를 결정해야한다.
  • 필요한만큼 Memory를 할당하고 해제하여야 한다.

Storage Management

OS는 획일적이고 논리적인 information storage를 제공한다.

File-System management

파일은 보통 Directory로 조직된다.
대부분의 시스템들에서의 접근 권한은 누가 어떤 것에 접근을 할지를 결정한다.

OS activity

  • 파일과 디렉토리들을 만들고 삭제
  • 파일과 디렉토리들을 관리하는 권한
  • 파일들을 두번째 저장공간에 매핑
  • Backup file들을 안전한 storage 매체에 저장한다.

Mass-Storage Management

일반적으로 disk들은 main memory에 적합하지 않은 data나 오랜 기간동안 저장되어야만 하는 data를 저장하기 때문에 Computer Operation의 전체 속도는 data subsystem과 이것의 알고리즘에 달려있다.

OS activity

  • 빈 공간 관리
  • 저장공간 할당
  • Disk scheduling

Int A가 Disk에서 Register로 이동하는 과정

  • Multitasking 환경의 경우 저장공간 위계에서 값이 어디에 저장되어 있는지에 상관없이 가장 최신의 값을 사용하기 위해 매우 조심히 다뤄져야 한다. 그러므로 OS가 접근하는 data를 항상 최신의 data라고 보장을 해줄 수 있어야 한다.
  • Multiprocessor 환경은 모든 CPU들이 각각 갖고 있는 Cache에 들어있는 값이 가장 최신의 값을 갖고 있도록 Cache coherency를 제공해야한다.

I/O Subsystem

OS의 목적 중 하나는 사용자로부터 hardware 장치들의 특성을 숨기는 것이다. 즉, Hardware 장치의 종류와 제조사 등 특성이 너무나도 다양하기 때문에 하나의 특성으로 일치시켜서 사용자가 Hardware들을 구분해서 사용할 필요성을 못느끼게 만들어야 한다.
I/O subsystem은 I/O의 메모리 관리, 일반적인 device-driver간의 interface, 특정 device에 대한 driver를 담당하는데, 이 중에서 메모리 관리에 대해 살펴보면 크게 3가지 방법이 있다.

  1. buffering : data가 전달이 될 때 일시적으로 data를 저장하는 것
  2. caching : 성능을 위해 자주 사용하는 data와 같이 전체 data의 일부분을 Cache와 같은 속도가 빠른 저장장치에 저장해 두는 것
  3. spooling : 어떤 작업이 생성한 output을 다른 작업에게 보낼 때 직접 보내지 않고 중간 단계의 임시 저장공간 (Spool)에게 보내는 것

Protection and Security

Protection

: OS에 의해 권한이 없는 대한이 자원에 접근하는 것이 막히게 되는 Mechanism\

Security

: 내부나 외부의 공격으로부터 시스템을 방어하는 것으로 denial-of-service, worms, viruses, identity theft를 포함하여 넓은 범위를 다룬다.

시스템은 일반적으로 먼저 누가 어떤 것을 할 수 있는지를 결정하기 위해 유저들을 구분한다. 예를들어 여러 명의 유저들이 시스템에 대한 접근 권한을 요청하였을 때 이 시스템이 중요한 정보를 갖고 있는 경우 이 PC의 주인 이외의 다른 어떤 유저에게도 권한을 내어 주지 않는 것이 있다.

Operating System Services

OS service의 set은 유저에게 도움이 되는 함수들을 제공해준다.

1. User Interface

  • 거의 모든 OS가 User Interface (UI)를 갖고 있다.
  • Command-Line Interface (CLI), Graphics User Interface (GUI), Batch Interface에 따라 다양하다.

2. Program Execution

  • 시스템은 메모리에 프로그램을 load해서 그 프로그램을 정상적인 방법과 비정상적인 방법 모두 실행하고 끝낼 수 있어야만 한다.

3. I/O Operation

  • 실행중인 프로그램이 파일이나 I/O device를 포함하는 I/O를 요구할 수도 있다.

4. File-system manipulation

  • 프로그램은 파일과 디렉토리를 읽고 만들고 삭제하며 검색할 필요가 있고, 파일 정보와 permission 관리를 할 필요가 있는데, file system이 이것들 위주로 관리한다.

5. Communications

  • Process들은 같은 컴퓨터나 네트워크 상의 다른 컴퓨터끼리 정보를 교환할 수 있다.
  • Communication은 공유 메모리나 OS에 의해 움직이는 packet을 통해 실행된다.

6. Error detection

  • OS는 항상 가능한 error를 염두에 두고 있어야 한다.
  • CPU, Memory, I/O, user program 등에서 발생할 수 있다.
  • 각각의 error의 유형에서 OS는 correct and consistent computing을 위해 적절한 action을 취해야 한다.
  • Debugging facility들은 유저와 프로그래머들이 시스템을 효과적으로 사용할 수 있도록 해준다.

7. Resource allocation

  • 여러 명의 유저들이 있거나 여러 작업들이 동시에 실행이 될 때 자원들은 각각에게 할당되어야 한다.

8. Accounting

  • 어떤 유저가 어떤 종류의 컴퓨터 자원을 얼마나 사용할지를 항상 주시하고 있어야 한다.

9. Protection and security

  • 여러명의 사용자나 네트워크 상의 컴퓨터 시스템에 저장된 정보의 주인들은 그 정보의 사용에 대한 권한을 원하기 때문에 concurrent process가 서로를 방해하면 안된다.
  • Protection은 시스템 자원에 대한 모든 접근이 관리되고 있다는 것을 보장해준다.
  • 외부인으로 부터 시스템에 대한 Security는 유저의 확인이 필요하며 외부 I/O 장치를 부적절한 접근 시도로부터 막아준다.

System Call

대부분 프로그램에 의한 접근은 직접적인 system call보다는 high level Application Program Interface (API)에 의해 접근 된다. 그 이유는 API를 사용할 경우 이식성 (Portability)와 사용의 편의성이 보장되기 때문이다.

여기서 이식성 (Portability)란 운영체제에 의존적인 system call이 아니라는 의미이다.

예를 들어 위의 그림을 보면 process를 생성하는 기능의 경우 기능은 같지만 Windows는 CreateProcess(), Linux는 fork()로 기능이 같은 두 함수의 이름이 다른 것을 확인할 수 있다. 따라서 이러한 점 때문에 OS에 dependent한 system call 대신 각각의 운영체제에 대한 API를 호출하는 것이다.

또 하나 참고할 점은 printf와 같이 library에 존재하는 함수의 경우 WRITE라는 system call을 호출하지만 C언어에서 제공하는 API이기 때문에 이런 경우는 OS에 dependent하지 않는다. Windows에서 IDE를 통해 printf를 호출하든 Linux에서 printf를 호출하든 결국엔 똑같은 기능을 하기 때문에 프로그래밍 언어에서 제공하는 경우는 위의 경우에 해당하지 않는다.

API

  • Windows : Win32
  • UNIX, Linux, Mac OS X : POSIX API
  • Java Virtual Machine (JVM) : Java API

한 가지 예시로 copy함수에 대한 system call의 순서를 보면 아래의 그림과 같다.

  • System call interface가 OS kernel에서의 의도한 system call을 불러와서 system call의 상태와 return value를 return한다.
  • Caller는 어떻게 system call이 실행되는지 알 필요가 없고 단지 API가 해주길 기다리며 OS가 결과로 어떤 작업을 할지 이해하기만 하면 된다.

Virtual Machines

: hardware와 OS kernel이 마치 그것들 모두가 Hardware인 것처럼 여기도록 한다. 즉, process가 process 만의 processor와 virtual memory를 갖고 있다는 착각을 하게 한다.

위의 그림을 보면 virtual machine의 유무에 따라 나뉘어 있는데, Virtual machine이 있는 경우만 보면 하나의 Hardware에 kernel이 여러개가 존재하고 각각 서로 다른 process들이 진행중인 것을 확인할 수 있다.

Virtual machine의 장점은 서로 다른 process들을 하나의 장치에서 사용할 수 있다는 점인데, 만약 process A, B, C가 각각 Windows, Linux, Unix에서 사용해야 하는 process일 경우 Virtual Machine을 사용하지 않는다면 각각의 운영체제가 깔려있는 서로 다른 컴퓨터에서 작업을 해야한다. 그러나 만약 Virtual Machine을 사용하게 된다면 서로 다른 운영체제여도 하나의 컴퓨터에서 작업을 할 수 있기 때문에 Cloud를 통해 서로 다른 운영체제 끼리 process를 공유할 수 있다는 엄청난 장점이 존재한다
실제로 Cloud computing에서 이러한 방식을 사용하고 있다고 한다.

한 가지 예시로 JVM (Java Virtual Machine)이 있다.

Write (Compile) once, run anywhere

이 Virtual Machine의 경우 조금 특이한 점이 있다. 기존의 Virtual Machine에서 프로그램을 돌릴 경우 Compile을 하여 기계어로 번역한 다음 공유를 하지만 이 경우 "Write once, run anywhere" 문구에서 알 수 있듯이 다른 컴퓨터로 class 파일만 보내서 그 기계에 맞게 compile을 한다는 점이다. 미리 compile을 할 경우 기계어로 번역이 된 상태이기 때문에 서로 다른 운영체제에서 해석이 안 될 가능성이 존재한다. 따라서 JVM에서는 이러한 점을 방지하고자 class 파일 자체를 보내버려서 그 운영체제에서 실시간으로 compile하도록 생성되어 있다.


profile
블로그 이전했습니다 (https://phj6724.tistory.com/)

0개의 댓글