운영체제입문 - 2장

taehoyoon·2023년 4월 19일

운영체제

목록 보기
2/6
post-thumbnail

운영체제 서비스

1. 사용자 인터페이스(User Interface):

  • CLI(Command Line Interface)
    텍스트 기반의 인터페이스로 사용자가 명령어를 입력하여 시스템을 제어
    이를 통해 사용자는 프로그램을 실행하거나, 파일을 관리할 수 있음
    예) Windows 명령 프롬프트, macOS 터미널

  • GUI(Graphical User Interface)
    그래픽 기반의 인터페이스로 사용자가 마우스, 키보드 등의 입력 장치를 사용하여 아이콘이나 메뉴 등을 선택함으로써 시스템을 제어
    사용자 친화적이며 직관적인 조작이 가능

  • Batch
    일괄 처리 방식으로, 여러 명령어나 작업을 하나의 스크립트 파일에 저장하여 순차적으로 처리
    사용자의 개입 없이 자동으로 처리되므로 시간과 노력을 절약
    .bat 확장자 형태로 저장됨

2. 프로그램 실행

  • 프로그램 Load
    사용자가 실행하려는 프로그램을 디스크로부터 메모리로 읽어 들입니다.

  • 프로그램 Run
    메모리에 로드된 프로그램을 CPU가 실행합니다.

  • 프로그램 End
    프로그램이 정상적으로 완료되거나 오류로 인해 종료됩니다.
    종료된 프로그램의 메모리 공간은 반환됩니다.

3. I/O, 파일시스템, 통신

  • 파일 또는 디바이스 I/O
    사용자가 파일이나 디바이스와 데이터를 주고받을 수 있도록 지원합니다.

  • 파일 및 디렉토리 구조
    파일과 디렉토리를 조직화하고 관리하는 체계를 제공합니다.

  • 프로세스 간 데이터 전송
    프로세스끼리 데이터를 주고받을 수 있도록 지원합니다. 예를 들어, IPC(Inter-Process Communication) 기술이 이에 해당합니다.

4. 오류 감지

  • 디바이스 또는 프로그램 오류 감지 및 처리
    운영체제는 하드웨어나 소프트웨어의 오류를 감지하고 적절한 조치를 취합니다.

  • 디버깅 정보 제공
    프로그램 개발자나 사용자가 오류를 수정하거나 시스템 문제를 해결할 수 있도록 디버깅 정보를 제공합니다. 이를 통해 개발자는 프로그램의 문제점을 파악하고 수정할 수 있으며, 사용자는 시스템 문제를 이해하고 해결책을 찾을 수 있습니다.

5. 자원 할당

운영 체제의 주요 기능 중 하나는 시스템 리소스를 다른 프로그램 및 프로세스에 할당하는 것입니다. 여기에는 효율적이고 효과적인 다중 사용, 다중 작업 실행을 보장하기 위한 CPU 주기, 메모리, 스토리지 및 I/O 리소스 할당이 포함됩니다. 운영 체제는 시스템 성능을 최적화하고 동일한 리소스를 놓고 경쟁할 수 있는 서로 다른 프로세스 간의 충돌을 방지하는 방식으로 이러한 리소스를 관리해야 합니다.

6. 계정 관리

운영 체제는 사용자 계정 및 관련 권한을 관리합니다. 여기에는 시스템 리소스에 대한 사용자 액세스 제어 및 권한 수준에 따라 사용자 작업 제한이 포함됩니다. 운영 체제는 중요한 데이터 또는 시스템 리소스에 대한 무단 액세스를 방지하기 위해 사용자 계정 및 권한이 안전하고 잘 관리되도록 해야 합니다.

7. 보호 및 보안

운영 체제의 또 다른 중요한 기능은 시스템 및 리소스에 대한 보호 및 보안을 제공하는 것입니다. 여기에는 시스템 리소스에 대한 액세스 제어, 무단 액세스 제한 및 사용자 ID 인증이 포함됩니다. 운영 체제는 모든 사용자와 프로세스가 시스템 리소스에 액세스할 수 있도록 적절하게 인증되고 권한이 부여되도록 해야 하며 무단 액세스 또는 악의적인 공격을 감지하고 방지하는 메커니즘도 제공해야 합니다.


시스템 호출

정의

  • OS 제공 서비스에 대한 프로그래밍 인터페이스
  • C 또는 C++와 같은 하이 레벨 언어로 작성
  • 프로그램은 대부분의 경우 Application Programming Interface (API)를 통해 시스템 호출 사용
  • 각 운영 체제 별 API
    • Windows: Win32 API
    • Unix, Linux, Mac OS X: POSIX API
      (Portable Operating System Interface)
    • JVM: Java API

사용자 프로그램은 일반적으로 사용자 모드(user mode)에서 실행되며, 커널 모드(kernel mode)에서 실행되는 운영체제의 자원에 직접 접근할 수 없습니다.
이때 시스템 콜을 사용하면, 사용자 프로그램이 운영체제의 기능을 안전하게 이용할 수 있게 됩니다.


사용자 모드와 커널모드

  • 사용자 모드
    사용자 영역 내에서의 자유로운 프로그램 실행 모드

  • 커널 모드
    시스템 서비스를 수행하기 위한 통제 하에 시스템 자원 사용 특권을 가지고
    실행되는 모드

  • 왜 커널 모드를 통해 운영체제 서비스를 수행하는가?
    운영체제 서비스는 여러 사용자가 공통으로 사용하는 자원이 특정 사용자에 의해 잘못 사용되어 손상되는 일이 발생하지 않도록 보호
    여러 사용자가 동시에 같은 서비스를 받고자 할 경우 우선순위에 따라 순서를 조정하고 통제하에 사용 되어야 함

  • 왜 시스템호출 API를 통해 커널 모드를 호출하는가?
    커널모드는 시스템, OS 종류에 따라 다양하게 수행됨
    사용자는 세부 처리 방법에 상관 없이 표준 API 호출을 통해 호환성 확보

파라미터 전달 방법

  • 시스템 호출 함수명 외 추가 정보 필요
    파라미터 개수, 데이터 타입 등이 다양하여 표준화 불가

  • 3가지 방법으로 구현
    1. 레지스터에 파라미터 값을 기록
    2. 메모리 상의 블록, 또는 테이블에 파라미터 값을 기록하고 블록의 주소를 레지스터에 기록
    3. 프로그램이 파라미터 값을 스택에 Push하고 커널에서 Pop 해서 사용

운영체제 구조


1. MS-DOS

  • Microsoft에서 개발하여 1980년대와 1990년대에 IBM 호환 개인용 컴퓨터에서 사용된 운영 체제

  • MS-DOS의 운영 체제 구조는 제한된 목적으로 사용하기 쉽고 단순하다

  • MS-DOS는 명확한 모듈 구분이나 잘 설계된 시스템 아키텍처 없이 초기에 단순한 구조로 설계되었습니다. 결과적으로 운영 체제는 모듈성이 부족하고 유지 관리 및 확장이 어려웠습니다. 이로 인해 개발자는 새로운 기능을 추가하고 시스템 성능을 개선하기가 어려웠습니다.

  • 또한 MS-DOS에는 시스템 보호 메커니즘이 없기 때문에 시스템 충돌 및 보안 위협에 취약합니다. 어떤 형태의 메모리 보호도 제공하지 않아 사용자 프로그램이 실수로 또는 악의적으로 서로의 메모리 공간을 덮어쓸 수 있습니다.

  • 이러한 한계에도 불구하고 MS-DOS는 단순성과 광범위한 하드웨어 및 소프트웨어와의 호환성으로 인해 수년 동안 널리 사용되는 운영 체제였습니다. 그러나 컴퓨터 기술이 발전하고 사용자 요구 사항이 복잡해짐에 따라 MS-DOS의 한계가 점점 더 명백해지면서 Windows, MacOS 및 Linux와 같은 보다 발전되고 기능이 풍부한 운영 체제가 개발되었습니다.

2. 모노리식

  • 전체 시스템 기능이 긴밀하게 결합된 단일 모듈로 통합된 운영 체제 설계

  • 하드웨어 기능에 의해 제한된 구조
    모놀리식 운영 체제에서 시스템의 구조는 기본 하드웨어 아키텍처에 의해 제한됩니다. 이는 운영 체제의 구성 요소가 하드웨어와 밀접하게 상호 작용하도록 설계 및 구현되어 시스템 리소스의 효율적인 활용을 보장한다는 것을 의미합니다. 결과적으로 이 디자인은 고성능을 제공할 수 있지만 하드웨어를 변경하면 운영 체제를 크게 수정해야 할 수 있으므로 시스템을 유지 관리하거나 확장하기가 더 어려울 수 있음을 의미하기도 합니다.

  • 커널과 시스템 프로그램으로의 분리
    모놀리식 운영 체제는 일반적으로 커널 + 시스템 프로그램 으로 구성
    커널: 프로세스 관리, 메모리 관리 및 장치 관리와 같은 작업을 처리하면서 하드웨어와 직접 상호 작용하는 시스템 호출 구조
    시스템 프로그램: 커널 외 컴파일러, 시스템 라이브러리 등 사용자 인터페이스를 제공하고 다양한 응용 프로그램을 지원하는 상위 수준의 유틸리티 및 서비스입니다. 이러한 시스템 프로그램은 커널과 통신하여 작업을 수행하므로 사용자와 응용 프로그램이 하드웨어와 간접적으로 상호 작용할 수 있습니다.

3. Microkernel

  • 핵심 커널의 책임과 기능을 최소화하는 데 중점을 둔 모놀리식 설계에 대한 대안적인 접근 방식

  • 부피가 크고 관리하기 어려운 커널 모듈화
    마이크로커널 운영 체제에서 커널은 작게 설계되어 가장 필수적인 기능만 수행
    ex) 프로세스 간 통신 관리, 기본 메모리 관리 및 최소한의 하드웨어 제어
    모놀리식 커널의 일부였던 나머지 기능은 이제 사용자 모드에서 실행되는 별도의 모듈로 구현

  • 장점
    1. 쉬운 확장성 및 뛰어난 이식성

    • 커널이 작고 시스템이 모듈화되어 있어 기능 추가 및 수정이 훨씬 쉬워짐
    • 이 모듈성은 약간의 변경으로 다른 하드웨어 아키텍처에 적응될 수 있기 때문에 더 나은 이식성을 가짐

    2. 높은 안정성

    • 커널의 책임이 적고 대부분의 서비스가 사용자 모드에서 실행되므로 시스템 충돌 가능성이 크게 줄어듦
    • 사용자 모드 서비스가 실패하면 전체 운영 체제에 영향을 주지 않고 다시 시작할 수 있으므로 전반적인 시스템 안정성이 향상

  • 단점
    1. 성능 저하

    • 증가된 모듈성이 더 많은 프로세스 간 통신을 필요로 하므로 시스템 오버헤드가 높아지고 응답 시간이 느려질 수 있음


4. Modules

  • 최첨단 기술이 적용된 로드 가능한 커널 모듈
    • 모듈식 OS에서 커널은 로드 가능한 커널 모듈을 지원하도록 설계
    • 이러한 모듈은 필요에 따라 커널에서 로드 및 언로드할 수 있는 별도의 구성 요소임
    • 각 구성 요소는 독립적이며 잘 정의된 인터페이스(I/F)를 통해 다른 구성 요소와 통신
    • 이는 개발자가 전체 시스템에 영향을 주지 않고 특정 모듈을 생성, 수정 또는 제거할 수 있으므로 유연성과 쉬운 업데이트를 허용합니다.

  • 최신 운영 체제
    • Solaris, Linux, Mac OS XWindows와 같은 많은 최신 운영 체제는 모놀리식, 마이크로커널 및 모듈식 설계의 요소를 결합하는 하이브리드 접근 방식을 활용합니다.
    • 이러한 조합을 통해 모놀리식 시스템의 성능 이점, 마이크로커널 시스템의 안정성 및 모듈성, 모듈식 시스템의 유연성 및 확장성을 활용할 수 있습니다.

5. Mac OS X

  • 그래픽 사용자 인터페이스(GUI)
    GUI는 사용자가 상호 작용하는 운영 체제의 시각적 부분입니다. Mac OS X에는 Aqua라는 매우 세련되고 사용자 친화적인 인터페이스가 있습니다. Aqua는 창, 버튼, 메뉴 및 아이콘과 같은 요소를 사용하여 응용 프로그램 전체에서 일관된 모양과 느낌을 제공합니다. 이 인터페이스를 통해 사용자는 애플리케이션, 파일 및 시스템 설정을 쉽게 탐색하고 관리할 수 있습니다.

  • 응용 프로그램 환경 및 서비스
    Java : 플랫폼 간 호환성을 제공
    Cocoa : 기본 응용 프로그램 개발 도구를 제공, 앱 개발 프레임워크
    QuickTime : 멀티미디어 콘텐츠를 처리
    BSD : 다양한 시스템 서비스와 함께 Unix 기반 기반에 기여

  • 커널 환경
    • Mach
      Mac OS 커널 환경의 기반 역할을 하는 마이크로커널
      기본적이고 낮은 수준의 서비스를 제공
      핵심 커널 기능을 다른 시스템 구성 요소와 분리하여 모듈성과 안정성을 제공
    • BSD
      BSD 구성 요소는 Mac OS 커널 환경에 통합되어 POSIX 호환 계층 및 추가 시스템 서비스를 제공
      BSD Unix에서 파생된 이 계층은 파일 시스템 관리, 네트워킹, 프로세스 관리 및 보안 기능과 같은 기능을 제공
      BSD 구성 요소는 친숙한 명령줄 인터페이스와 광범위한 오픈 소스 소프트웨어 및 도구와의 호환성을 제공
    • 입/출력(I/O) 도구 세트
      I/O 도구 세트는 커널과 시스템에 연결된 하드웨어 장치 간의 통신 관리를 담당합니다. 스토리지 장치, 네트워크 인터페이스 및 입력 장치와 같은 다양한 유형의 하드웨어를 처리하는 일련의 드라이버, 라이브러리 및 프레임워크로 구성됩니다. I/O 도구 세트는 커널이 하드웨어와 효율적으로 상호 작용할 수 있도록 하여 시스템 전체에서 일관된 성능과 장치 지원을 제공합니다.
    • 커널 확장
      kext라고도 하는 커널 확장은 Mac OS 커널의 기능을 확장할 수 있는 동적으로 로드 가능한 모듈
      개발자가 핵심 커널 코드를 수정하지 않고 새로운 기능을 추가하거나 추가 하드웨어를 지원할 수 있는 방법을 제공
      커널 확장은 필요에 따라 로드 및 언로드할 수 있으므로 커널 환경에서 유연성과 모듈성을 제공
      이 기능을 사용하면 전체 시스템을 점검하지 않고도 시스템 업데이트 및 하드웨어 지원을 보다 쉽게 구현 가능

6. Android

Google에서 개발한 Android는 주로 스마트폰 및 태블릿과 같은 터치스크린 모바일 장치용으로 설계됨

Applications(응용 프로그램)
사용자가 장치에 설치된 다양한 앱과 상호 작용할 수 있는 Android 운영 체제의 최상위 계층
타사 개발자가 개발하거나 Google 등 제조업체에서 사전 설치 가능
예)카카오톡, 이메일, 웹 브라우져, 게임, 생산성 도구 등

Application Framework
개발자가 애플리케이션을 만들고 관리할 수 있도록 하는 일련의 API 및 서비스
이 계층에는 활동 관리자, 콘텐츠 제공자, 리소스 관리자 및 알림 관리자와 같은 구성 요소가 포함
이러한 구성 요소는 개발자가 장치 기능에 액세스하고, 앱 수명 주기를 관리하고, 데이터를 저장 및 검색하고, 사용자 인터페이스와 상호 작용하는 데 도움이 됨

라이브러리
핵심 시스템 기능을 제공하고 다양한 하드웨어 구성 요소를 지원하는 기본 C/C++ 라이브러리 모음
이러한 라이브러리 중 일부에는 Surface Manager(디스플레이 관리용), Media Framework(오디오 및 비디오 재생용), SQLite(데이터베이스 관리용) 및 WebKit(웹 브라우징용)이 포함
이러한 라이브러리를 사용하면 Android 운영 체제가 하드웨어와 상호 작용하고 앱 개발자에게 필수 서비스를 제공할 수 있음

Android 런타임
기기에서 애플리케이션 코드를 실행하는 역할
여기에는 모바일 장치의 메모리와 성능을 최적화하도록 특별히 설계된 Dalvik Virtual Machine(또는 최신 버전의 Android Runtime, ART)이 포함
Android 런타임에는 앱 개발자가 애플리케이션을 빌드하는 데 필요한 필수 Java API를 제공하는 핵심 라이브러리 세트도 포함

Linux 커널
Linux 커널은 프로세스 관리, 메모리 관리, 장치 드라이버 및 보안과 같은 필수 저수준 시스템 기능을 제공하는 Android 운영 체제의 기초
Android는 모바일 장치에 최적화되고 Android 관련 기능 및 요구 사항을 지원하도록 조정된 맞춤형 버전의 Linux 커널을 사용


profile
어흥🦁

0개의 댓글