ggoggo

운영체제 : Ch2. Operating-System Services 본문

3-1/컴퓨터구조 및 운영체제

운영체제 : Ch2. Operating-System Services

chchae01 2022. 6. 15. 09:45

Operating System Services

  • 운영체제는 프로그램과 사용자에게 프로그램과 서비스 실행 환경 제공
  • 운영체제 서비스 중 하나는 사용자에게 유용한 기능을 제공

- User Interface : 거의 모든 운영 체제에는 사용자 인터페이스(UI)가 있다

    => Command-Line(CLI), Graphics User Interface(GUI), touch-screen, Batch

- Program execution : 시스템이 프로그램을 메모리에 로드하고 해당 프로그램을 정상적으로 또는 비정상적으로 실행할 수 있어야 한다(오류표시)

- I/O operation : 실행 중인 프로그램에 I/O가 필요할 수 있으며, 여기에는 파일 또는 I/O장치가 포함될 수 있다

- File-system manipulation : 파일 시스템이 특히 중요. 프로그램은 파일과 디렉터리를 읽고 쓰고, 만들고 삭제하고, 검색하고, 파일 정보를 나열하고, 권한을 관리해야한다.

- Communicaton : 프로세스는 네트워크를 통해 동일한 컴퓨터 또는 컴퓨터 간에 정보를 교환할 수 있다.

  => 통신은 공유 메모리 또는 메시지 전달(OS에 의해 인동된 패킷)을 통해 이루어질 수 있다.

- Error detection : OS가 가능한 오류를 지속적으로 인식해야함

  => CPU 및 메모리 하드웨어, I/O장치, 사용자 프로그램에서 발생 가능

  => 각 오류 유형에 대해 OS는 정확하고 일관된 컴퓨팅을 보장하기 위해 적절한 조치를 취해야함

  => 디버깅 기능은 사용자와 프로그래머가 시스템을 효율적으로 사용할 수 있는 능력을 크게 향상시킬 수 있다.

 

  • 리소스 공유를 통해 시스템 자체의 효율적인 운영을 보장하는 또 다른 OS 기능 set

- Resource allocation : 여러 사용자 또는 여러 작업이 동시에 실행되는 경우 각 사용자에게 리소스를 할당해야함

  => CPU 주기, 주 메모리, 파일 스토리지, I/O 장치 등 다양한 리소스

- Logging : 어떤 사용자가 얼마나 많은 컴퓨터 리소스를 사용하고 있는지 추적

- Protection and security : 다중 사용자 또는 네트워크 컴퓨터 시스템에 저장된 정보의 소유자는 해당 정보의 사용을 제어하고자 할 수 있으며, 동시 프로세스가 서로 간섭하지 않아야 한다.

 1) Protection에는 시스템 리소스에 대한 모든 액세스가 제어되도록하는 작업 포함

 2) 외부로 부터의 시스템 Security는 사용자 인증이 필요하며, 잘못된 액세스 시도로부터 외부 I/O 장치를 보호하는 것으로까지 확장된다.

operating system services

Command Line interpreter

  • CLI를 통해 직접 명력 입력 가능
  • 여러가지 선호 구현 가능 - 쉘

* 컴파일 : 프로그램 짱 다음에 전부 기계어로 만든 후 한번에 실행

* Interpreter : 한줄 한줄 해석하며 실행

Bourne Shell Command Interpreter

User Operating System Interface - GUI

  • 사용자 친화적인 데스크톱 메타포 인터페이스

- 일반적으로 마우스, 키보드 및 모니터

- 아이콘은 파일, 프로그램, 작업 등을 나타낸다

- 인터페이스의 객체 위에 있는 다양한 마우스 버튼은 다양한 작업 실행

  • 많은 시스템에 CLI, GUI 포함됨

Touchscreen Interfaces

System calls

  • OS에서 제공하는 서비스에 대한 프로그래밍 인터페이스
  • 일반적으로 고급언어로 작성(C or C++)
  • 대부분 직접 시스템 호출이 아닌 고급 API(Application Programming Interface)를 통해 프로그램에서 액세스
  • 가장 일반적인 세가지 API - Windows용 Win32 API, POSIX 기반 시스템용 POSIX API, java 가상 머신용 java api

System Call Inplementation

  • 일반적으로 각 시스템 호출에 번호가 연결됨

- 시스템 호출 인터페이스는 이 숫자에 따라 인덱싱된 테이블을 유지

  • 시스템 호출 인터페이스가 OS 커널에서 의도된 시스템 호출을 호출하고 시스템 호출의 상태와 모든 반환 값을 반환
  • caller는 시스템 호출이 어떻게 구현되는지 알 필요 없음

- API를 따르고 OS가 결과 호출로 수행할 작업을 이해하면 됨

- API에 의해 프로그래머에게 숨겨진 OS 인터페이스의 대부분의 세부정보

  => 라이브러리, 컴파일러, 인터프리터 및 로더를 포함한 런타임 환경(RTE)으로 관리

API - System Call - OS Relationship

System call parameter passing

  • 원하는 시스템 호출의 단순한 identity보다 더 많은 정보가 필요한 경우가 많다.

- 정확한 정보 유형 및 양은 OS 및 호출에 따라 다름

  • OS에 매개변수를 전달하는 데 사용되는 세 가지 일반적인 방법

1) Simplest : 레지스터에서 매개 변수 전달

  => 경우에 따라 레지스터보다 더 많은 매개 변수일 수 있다.

2) 메모리에 있는 블록 또는 테이블에 저장된 매개 변수 및 레지스터에서 매개변수로 전달된 블록의 주소

3) 프로그램에 의해 스택에 배치되거나 푸시된 매개 변수와 운영 체제에 의해 스택에서 튀어나온 매개 변수

=> 블록 및 스택 메서드는 전달되는 매개변수의 수 또는 길이 제한x

Types of System calls

  • Procecss control

- 프로세스 생성, 프로세스 종료

- 종료, 중단

- 로드, 실행

- 프로세스 특성 가져오기, 프로세스 특성 설정

- wait for time

- 대기 이벤트, 신호 이벤트

- 메모리를 할당하여 사용 가능하게 하기

- 오류인 경우 메모리 덤프

- 버그를 확인하는 Debugger, single step 실행

- 프로세스 간 공유 데이터에 대한 액세스를 간리하기 위한 Locks

  • File management

- 파일 생성, 파일 삭제

- 파일 열기, 닫기

- 읽기, 쓰기, 재배치

- 파일 특성 가져오기 및 설정

  • Device management

- 요청장치, 릴리스 장치

- 읽기, 쓰기, 재배치

- 장치 특성 가져오기, 장치 특성 설정

- 논리적으로 장치 연결 또는 분리

  • Information maintenance

- 시간 또는 날짜 가져오기 & 설정

- 시스템 데이터 가져오기 & 설정

- 프로세스, 파일 또는 장치 속성 가져오기 & 설정

  • Communications

- 통신 열결 만들기, 삭제

- 호스트 이름 또는 프로세스 이름에 모델을 전달하는 경우 메시지 보내기&받기 (클라이언트 => 서버)

- shared memory model 생성 및 메모리 영역 액세스

- 상태 정보 전송

- 원격 장치 연결 및 분리

  • Protection

- 리소스에 대한 액세스 제어

- 사용 권한 가져오기 & 설정

- 사용자 액세스 허용 & 거부

Examples of Windows and Unix System calls

Standard C Library Example

Example : Arduino

  • single tasking 단일작업
  • 운영체제 없음
  • USB를 통해 플래시 메모리에 로드된 프로그램
  • 단일 메모리 공간
  • 부트 로더가 프로그램을 로드한다
  • 프로그램 종료 => shell 다시 로드

Example : FreeBSD

  • Unix 변형
  • 멀티 태스킹
  • 사용자 로그인 => 사용자가 선택한 shell 호출
  • shell은 fork() 시스템 호출을 실행하여 프로세스를 생성한 후 exec()를 실행하여 메모리에 프로그램을 로드하고 실행
  • shell은 프로세스가 종료되기를 기다리거나 사용자 명령과 계속한다(프로세스가 background에서 실행될 때)
  • 프로세스 종료 : 

- code = 0 : no error

- code = 1 : error code

System Services

  • 시스템 서비스(system service)는 프로그램 개발 및 실행을 위한 편리한 환경을 제공

• 파일 관리
• 상태 정보
• 프로그래밍 언어 지원
• 프로그램 로드 및 실행
• 통신
• 백그라운드 서비스
• 응용 프로그램

  • 운영체제에 대한 대부분의 사용자의 견해는 실제 시스템 호출이 아닌 시스템 프로그램에 의해 정의됨

 

  • 프로그램 개발 및 실행을 위한 편리한 환경제공

=> 그 중 일부는 단순히 시스템 호출에 대한 사용자 인터페이스이고, 다른 일부는 훨씬 더 복잡

  • File management : 파일 및 디렉터리 생성, 삭제, 복사, 이름변경, 인쇄, 덤프, 목록작성 및 일반적인 조작
  • Status information

- 일부 사용자는 시스템에 날짜, 시간, 사용 가능한 메모리 양, 디스크 공간, 사용자 수 등의 정보를 요청합니다.
- 자세한 성능, 로깅 및 디버깅 정보를 제공하는 사용자도 있습니다.
- 일반적으로 이러한 프로그램은 출력을 터미널 또는 다른 출력 장치로 포맷하고 인쇄합니다.
- 일부 시스템은 구성 정보를 저장하고 검색하는 데 사용되는 레지스트리를 구현합니다.

  • File modification

- 파일을 만들고 수정하는 텍스트 편집기

- 파일의 내용을 검색하거나 텍스트를 변환하는 특수명령어

  • Programming-language support

컴파일러, 어셈블러, 디버거, 인터프리터 제공

  • Program loading and execution

절대 로더, 재배치 가능 로더, 링크 편집기 및 오버레이 로더, 상위 레벨 및 기계 언어용 디버깅 시스템

  • Communication

프로세스, 사용자 및 컴퓨터 시스템 간에 가상 연결을 만드는 메커니즘을 제공

 => 사용자가 다른 사용자의 화면으로 메시지 보내기, 웹페이지 찾아보기, 전자 메일 메시지 보내기 ...

  • Background Services

- 부팅  시 실행

  => 일부는 시스템 시작 후 종료

  => 시스템 부팅에서 종료까지 일부

- 디스크 검사, 프로세스 예약, 오류 기록, 인쇄와 같은 기능 제공

- kernel context가 아닌 user context에서 실행

- 서비스, subsystems, daemons로 알려짐

  • Application programs

- 시스템 관련 없음

- 사용자에 의해 실행

- 일반적으로 OS 일부로 간주 x

- 명령줄, 마우스 클릭, 핑거 포크로 실행

Linkers and Loaders

  • 소스 코드가 모든 물리적 메모리 위치에 로드되도록 설계된 객체 파일로 컴파일됨 - relocatable object file
  • Linker 는 이를 단일 이진 실행 파일로 결합 & 라이브러리도 가져옴
  • 프로그램이 secondary storage인 이진 실행 파일로 상주
  • 실행할 Loader에 의해 메모리로 가져와야함

=> 재배치(relocation)는 프로그램 부품에 최종 주소를 할당하고 해당 주소와 일치하도록 프로그램의 코드와 데이터를 조정

 

  • 현대의 범용 시스템은 라이브러리를 실행 파일에 연결하지 않음!

오히려 dynamically linked libraries(in Windows, DLLs)는 필요에 따라 로드되며, 동일한 버전의 라이브러리를 사용하는 모든 사용자가 공유(한번 로드됨)

  • 객체, 시행 파일 형식은 표준이므로 운영 체제가 로드 및 시작 방법을 알고 있다.

The Role of the Linker and Loader

Microkernels

: 운영체제에 추가되어야 하는 메커니즘을 초소한으로 제공하는 초소형 커널

  • kernel space => user space
  • Mach는 마이크로커널의 예

Mac OS x kernel(Darwin)은 부분적으로 Mach를 기반으로 함

  • 메시지 전달을 사용하여 사용자 모듈 간에 통신 수행 => 시간 걸림
  • 이점

- 마이크로커널을 더 쉽게 확장

- 운영 체제를 새로운 아키텍처로 쉽게 이식

- 신뢰성 향상(커놀 모드에서 실행되는 코드 감소)

- 보안 강화

  • 단점

- kernel space 통신에 대한 user space의 성능이  overhead된다.

macOS and iOS Structure

Darwin

iOS

  • iPhonem iPad용 Apple 모바일 OS

- Mac OS X에서 구조화되어 기능 추가

- OS X 응용 프로그램을 기본적을 실행하지 않고 다른 CPU 아키텍처에서도 실행x

- Cocoa Touch objective -C API for 앱개발

- Media 층 for 그래픽, 오디오, 비디오

- Core service는 클라우드 컴퓨팅과 데이터베이스를 제공

- max os x 커널 기반 핵심 운영 체제

 

Android

  • Open handset alliance에서 개발(google 제공) => 오픈소스
  • IOS와 유사한 스택
  • Linux 커널 기반이지만 수정됨

프로세스, 메모리, 장치 드라이버 관리 기능 제공

전원관리 기능 추가

  • 런타임 환경에는 라이브러리의 핵십 집합과 Dalvik 가상 머신(현재 Android Run Time, ART)이 포함됨

Java plus Android API에서 개발된 앱

 => java class 파일이 java 바이트 코드로 컴파일 된 다른 실행 파일로 변환되어 Dalvik VM(ART)에서 실행

  • 라이브러리에는 웹 브라우저(웹 킷) 데이터베이스(...등 포함됨

* HAL : HW와 SW 사이의 중간 완충제 역할(java 언어in kernel을 c언어 in user로 변환..?)

Building and Booting Linux