[OS] OS Structure와 Service

sujin·2023년 4월 21일
0

OS

목록 보기
2/3
post-thumbnail

OS Structure에 대하여 알아보며 Service 이해하기

OS의 구조에 대해서 알아보며 이제 본격적으로 OS의 디테일한 내용에 다가가보자!

  • 운영체제가 user, process, system에게 제공하는 서비스에 대해서 알아볼 수 있을 것이다.
  • 운영체제의 구조를 다양하게 설명한다.
  • install 와 customize 에 대해서 알아보고 booting이 어떻게 진행되는지 함께 알아볼 수 있을 것이다.

Operating System Structure

helpful to the User

  • User Interface

    Batch(큰 그룹을 나눠서 처리. not interactive, Scheduling), CLI(Command-Line), GUI(Graphics User Interface)

  • Program execution - 프로그램 실행.

    메모리 Load → Run → End

  • I/O Operation

    다양한 종류의 i/o 작업을 지원

  • File System Service

    read, write, create, delete, search, list, permission

  • Communication - process , network

    Shared Memory : 메모리를 공유하는 과정에서 읽기,쓰기 작업이 발생
    Message Passing : Message를 save, receive

  • Error detection - OS는 error에 대한 action(에러처리 프로그램)을 실행

    debugging : 수정하는 툴

  • communications : network를 통해서 computer 사이에서 의사소통 테그닉을 제공, process끼리의 의사소통을 제공

    1. shared memory : 두개의 프로세스끼리의 소통을 위해 각자 존재하는 다른 Memory가 존재할텐데 서로 같이 communication해야한다면 둘이 같이 공유하는 메모리 공간을 정해줌으로써 서로 communication이 이루어지도록한다.
    2. message passing : 수신자, 발신자 process끼리 정해진 포맷을 가지는 packet을 서로 주고 받는 방식의 communication 방식이다.
  • Error Detection
    error가 발생하면 처리해주는 역할을 제공한다. 어떤 유형의 interrupt가 발생하는지 잡고 그것을 처리해준다.
    Debugging을 사용해서 발생한 error를 찾고 수정을 한다.

시스템의 효율적인 사용

  • Resource Allocation : 자원할당은 공평하게 이루어져야한다.

    Resource : cpu, main memory, file storage 등

프로세스가 공평하게 실행되고 완료되면 자원을 반환한다.

  • Accounting : 누가 computer resource를 얼마만큼 사용하고 차지하고 있는지 기록하는 서비스

    "To keep track" 서비스로 성능을 조절하기 위해서 계속 지켜보고있는 서비스이다.
    ex). cpu의 사용률이 80%이상 된다면 다음 업그레이드시에 이를 고려하여 cpu를 확장시킨다.

  • Protection and security : 컴퓨터 자원에 대한 접근제어

    보호(access to system resource)와 보안(Authentication)을 제공한다.

User Interface

  • CLI

Command Line Interface - 명령어 창에 직접 입력해서 작업을 진행하는 인터페이스 방식

kernel에 built-in하는 방식과 system program으로 제공하는 방식이 존재

  • 명령어가 모두 컴파일된 상태에서 그것을 사용해서 실행(command built-in)시키는 방식. ⇒ 수정하거나 삭제할때 전체에 대한 명령어에 대해서 다시 모두 다 컴파일해야하기에 효율성이 떨어짐. 다만 속도가 빠르다.
  • system program : 프로그램 형태로 명령어들이 존재하기에, 해당 명령어를 실행시키기만 하면 됨. ⇒ 따라서, 명령어를 실행하거나 삭제하기가 쉬움.
  • GUI

User-friendly desktop metaphor interface

  • window는 GUI가 기본이고 CLI가 옵션.
  • Linux, Unix는 CLI가 기본이고 GUI가 옵션.

System call

운영체제의 서비스를 사용하기 위해서 제공되는 interface이다.
대표적으로 Win32 API, POSIX API, JVM(Java Virtual Machine)에서 제공하는 JAVA API 등이존재한다.

왜 system call을 직접 사용하지 않고 API를 이용하는가?
사용하기 쉽고 효율적이기 때문이다.

ex) copy

copy과정에서 굉장히 많은 기능들이 필요하고 이를 위해 많은 system call이 동작한다.

ex) win32 API - ReadFile()

파일을 읽을 때 위와 같이 ReadFile이라는 함수에 parameter를 넘겨주어 파일을 읽어오는 system call을 호출한다.

  • system call의 구현

number로 system call이 작성되어있는 table에서 system call이 있는 곳의 시작 위치를 찾는다.
찾은 뒤 프로그램을 동작시키고 return된다.

사용자는 kernel에서 동작하는 system call이 어떻게 실현되는지 알 필요없고 api 사용방법만 알면 OS service를 system call을 통해서 제공받을 수 있게된다.

  • ex) C Library

printf : library call -> write : system call
user mode에서 printf가 실행되면 C 라이브러리에 접근하고 kernel 모드로 넘어가며 write()라는 System call이 발생한다.
이후 table을 뒤져 실행명령어가 존재하는 주소값을 가져오고 찾아가서 프로그램을 실행시킨뒤 응답한다.

  • parameter passing 방식
  1. cpu가 사용하는 register를 사용할 수 있지만, 용량문제가 발생가능하다.
  2. memory의 일부분 black으로 잡고 parameter만 사용할 수 있는 공간으로 설정한다.
  3. stack으로 memory의 일부분을 사용할 수 있도록 한다.

x번지에 parameter register의 시작주소를 담는다.
system call의 number를 kernel에서 table에처 찾은 뒤 code를 동작시키는데 이때, 사용되어야할 paramter가 x번지에 있음을 알수있도록 함께 넘겨준다.
x번지에서 parameter를 가져와서 사용한다.

  • Types of System call

process control
file management
Device management
Information maintenance
Communication

등에 해당하는 System call이 존재한다.

System Programs

system program이란 사용자가 system call을 사용하기 쉽도록 만들어진 User Interface를 의미한다.

User는 System program을 사용할 뿐 직접 system call을 사용하지도 않고 눈에 볼 수도 없다.

  • File 관리

    create, delete, copy, print, dump 등

  • status imformation

    registry : 상태정보를 저장하기 위한 레지스터들의 묶음
    status : date, time, amount of available
    memory, disk space, number of users

    로그와 디버깅 정보 등이 존재할 수 있다.

  • file modification

    • text editors : text editor, to search contents of files
    • search 기능 제공
  • programming-language : 명령어를 실행파일로 변경해주는 역할

    compiler(한번에 기계어로 번역했을 경우를 컴파일러라고함 - high level language), assemblers( low level language를 기계어로 번역), interpreters(한줄한줄 번역)

  • loading : memory로 실행시키기 위해서 가지고 올라오는 것.

    절대 로더 : 한번 메모리로 가지고 오면 메모리 위치가 변화하지 않는다.
    relocatable loader : memory 위치가 변화할 수 있음
    linkage editor : 실행시킬 프로그램을 연결해주는 역할
    overlay-loader : memory위로 올려주는 로더이지만 중첩기능이 포함되어있는 메모리 로더. 프로세스 하나가 사용중인 메모리를 다른 프로세스가 특정 빈 부분을 비었을 때 사용이 가능하다. 프로그램을 효율적으로 동작시키기 위해서 필요하다.

  • communication : 한 사용자가 다른 사용자에게 메시지나 이메일을 보내는 것. 원격 로그인 등


OS Design

  • Policy : What? 정책
  • Mechanism : How? 구현방법

이때, policy에 대한 machanism은 변경 가능성을 고려해서 Policy와 Mechanism을 "구분해서" 고려하고 설계를 진행해야한다.


System Structure

MS-DOS : disk operating system

  • memory가 굉장히 작아서 문제가 된다.(memory가 640K였어서 제약사항이 여러가지였을 수 밖에 없다)
  • 구조가 제대로 정의되지 않아 문제가 된다.
    memory 제약사항으로 인해 각 level끼리 pass하는 구조가 발생하고 기능적인 분리가 제대로 이루어질 수가 없었다.

Layerd Approach - Modules 방식

level로 나뉘어져있는 OS 모델인데 bottom layer가 layer0으로 구분된다.
hardware가 0번의 layer -> hardware를 구동시키는 프로그램(Device Driver) -> ....(File Manager) -> User interfacc가 n번의 layer

UNIX

kernel을 사이로 application program과 device를 구분하고 그 사이에서 OS 기능을 제공한다.
다만, kernel의 역할이 커진다는게 단점이다.

Microkernel System Structure - Modules 방식

  • 핵심적인 기능만 가지도록 kernel을 축소한다.
    나머지는 사용자 level 위쪽으 message passing(packet이용) 방식으로 소통한다.
    kernel 안의 기능 확장에 있어서 작업이 용이해진다.
    새로운 곳에 microkernel os을 설치할 때 쉽다.
    kernel mode를 안에서의 reliable(신뢰도 : 계속 kernel이 동작하고 있어야함)가 높아진다.
    secure가 높아진다.
  • 객체지향적인 구조로 핵심 로직이 분리되어 존재한다.
  • 다만, 모듈이 늘어나면 message passing이 많아지고 이는 overhead이기에 성능에 영향을 줄 수 있다.
  • flexible 측면에서 Layered보다 더 좋다.

Virtual Machine

virtual machine은 hardware를 독립적으로 존재하도록 할 수 있다.
scale out 방식으로 수평적 확장을 instance추가를 통해서 제공한다.

  • 어떻게 가능한가?
  1. CPU Scheduling : cpu의 자원을 여러개의 가상머신에서 20%, 30%, 50% 처럼 각각 할당해준다.
  2. Spooling and file system : device들이 여러개 있을텐데 별도의 자기자신의 입출력이 존재하는것처럼해준다.
    harddisk는 하나지만 쪼개서 나눠줘서 논리적으로 구분한다.
  3. time sharing : 별도의 opreting console이 있는 것처럼 모두 수행해준다.
  • 구현하기가 어렵지만 지금은 많이 쉬워졌다.

VM WARE

virtualization layer를 통해서 가상화가 진행된다.
자원을 효율적으로 나눠서 놀고있는 자원이 없도록 여러대가 사용할 수 있도로 제공한다.

JVM

호환성이 좋다.
class를 interpreter 방식으로 읽고 host는 이것을 사용하기만 하면 된다.

Operating System Generation

  • SYSGEN : 하드웨어에 대한 정보들(메모리, cpu 종류, 키보드 여부 등)을 모아준다.
  • Booting : main기판의 칩(read만가능)에 들어있는 bootstrap program에 의해서 컴퓨터가 커지며 안의 데이터를 모두 로딩해서 memory에 올려주는 작업이 수행된다.
  1. bootstrap loader program이 어디있는지 확인한다.
  2. 돌면서 실제 부팅(ROM에서 memroy location에 로딩)작업이 실행된다.

지금까지 OS의 구조와 서비스가 어떻게 제공되는지에 대해서 알아보았다!
다음시간에는 서비스가 제공될 때 process가 어떻게 동작하는지에 대해서 알아보겠다~

0개의 댓글