본문 바로가기
운영체제

[OS] 서비스, 시스템 콜, 구조, 부팅 과정

by 파스텔코랄 2023. 3. 9.

운영체제 서비스

운영 체제가 사용자에게 제공하는 서비스

  • 유저 인터페이스
      명령줄 인터페이스(CLI), 그래픽 사용자 인터페이스(GUI)
  • 프로그램 실행
      프로그램을 메모리에 로드하고 실행 후 종료
  • I/O 작업
      키보드/마우스 입력, 모니터/프린터 출력
  • 파일 시스템 조작
      파일 또는 디렉터리 읽기/쓰기, 파일 만들기/삭제/검색 등을 수행
  • 통신
      프로세스 간에 정보를 교환
  • 오류탐지
      하드웨어(메모리 오류, 전원 장애)
      I/O 장치(네트워크 연결 오류, 프린터에 용지 부족)
      사용자 프로그램(산술 오버플로, 잘못된 메모리 액세스)

시스템 자체의 효율적인 운영을 위한 OS 기능

  • 자원 할당(Resource allocation)
      다중 사용자 또는 다중 작업의 경우
      CPU 주기, 메모리, 파일 스토리지 및 I/O 장치
  • 회계(Accounting)
      사용자가 사용하는 리소스의 양과 종류.
  • 보호 및 보안(Protection and security)
      보호 : 시스템 리소스에 대한 액세스 제어
      보안 : 사용자 인증, 잘못된 액세스 시도로부터 방어

 


운영 체제 사용자 인터페이스

명령줄 인터페이스(CLI)

  • 키보드 기반 인터페이스
  • Shells
      사용자로부터 명령을 가져와 실행
      명령 인터프리터로 호출
      예) bash, csh 등
  • 명령 구현
      셸 내에 내장된 명령 : 예) cd, alias 등
      별도 프로그램 : 예) ls, vi 등
  • 사용자는 명령을 기억해야 한다.

그래픽 사용자 인터페이스(GUI)

  • 마우스 기반 인터페이스
  • 사용자 친화적인 인터페이스.
      , 메뉴 시스템, 아이콘(파일, 프로그램, 작업 등)

CLI vs GUI

  • 개인의 취향
  • 최신 OS는 두 가지 인터페이스를 모두 제공
      마이크로소프트 윈도우
      애플 맥 OS X
      솔라리스
      리눅스

 


시스템 콜

시스템 콜

  • OS에서 제공하는 인터페이스
  • 프로그램이 운영 체제에서 서비스를 요청하는 방법.
      예) 하드 디스크 액세스
      예) 새 프로세스 생성 및 실행
  • 프로세스운영 체제 간에 필수적인 인터페이스를 제공한다.
  • 일반적으로 고급 언어(C 또는 C++)로 작성된다.


예) 한 파일의 내용을 다른 파일에 복사

Acquire input file name
    write prompt to screen ←
    accept input ←
Acquire output file name
    write prompt to screen ←
    accept input ←
Open the input file ←
    if file doesn’t exist, abort ←
Create the output file ←
    if file exists, abort ←

Loop
    read from input file ←
    write to output file ←
Until read fails

Close output file ←
Write completion message to screen ←
Terminate normally ←

 


API

응용 프로그램 인터페이스(Application Program Interface; API)

  • 응용 프로그램 프로그래머가 사용할 수 있는 기능 집합
  • 가장 일반적인 세 가지 API
      Windows용 Win32 API
      POSIX 기반 시스템(UNIX/Linux)용 POSIX API
      Java 가상 시스템의 Java API
  • 시스템 콜 대신 API를 사용하는 이유
      휴대성(Portability)
      사용하기 편리

프로그래머는 시스템 콜 구현을 알 필요가 없다.

  • API를 준수하고 OS가 무엇을 할 것인지 이해하면 된다.
  • OS에 대한 자세한 내용은 API에 의해 프로그래머에게 숨겨진다.

 


System call vs. API

시스템 콜
API

 


System call handling

  • fork() 시스템 콜 호출(i386-linux 시스템)

 


시스템 콜 매개 변수 전달

시스템 콜 식별보다 더 많은 정보필요한 경우가 많다

  • 예) open ("/etc/passwd", O_RDONLY);
      open은 정보 두개가 필요
  • 예) read (3, buf, 4096);
      read는 정보 세개가 필요
  • 정보의 종류와 양은 OS와 시스템 콜에 따라 다르다.

OS에 매개 변수를 전달하는 세 가지 방법

  1. 레지스터 매개 변수를 전달
  2. 메모리 테이블에 파라미터를 저장한 다음 레지스터에 테이블 주소 전달
      예) Linux, Solaris
  3. 프로그램으로부터 매개 변수를 스택에 push하고 OS으로부터 스택에서 pop off

테이블을 통해 매개 변수 전달

 


시스템 콜 유형

프로세스 관리

  • 생성/실행, 로드/실행, 대기/신호 이벤트
  • 예) fork(), execve(), getpid(), signal()

파일 관리

  • create/delete, open/close, read/write
  • 예) open(), read(), write() close()

메모리 관리

  • 메모리 할당
  • 예) brk()

정보 유지

  • get/set timer or date, get/set process, file, or device attributes
  • 예) time()

통신

  • create/delete connection, send/receive message
  • 예) socket(), bind(), connect(), …

 


운영 체제 설계 및 구현

설계 목표

  • 하드웨어 및 시스템 유형 선택
      batch, time sharing, 단일/다중 사용자, 분산, real-time
  • 요구 사항들
      사용자 뷰 : 사용하기 편리하고, 쉽고, 신뢰할 수 있고, 안전하고, 빠르다.
      시스템 뷰 : 설계, 구현, 유지보수가 용이 / 유연성, 안정성, 오류 없음, 효율성

정책과 메커니즘의 분리

  • 메커니즘(mechanism): 어떻게 할 수 있을까?
      CPU 보호를 위한 타이머 구성
      예) 세금을 통한 사회갈등 해소
  • 정책(policy): 무엇을 해야 할까?
      타이머는 얼마나 설정해야 하나?
      예) 빈민층에 세금감면(-30%), 고소득자에 특별세금 부과(+30%)
  • 또 다른 예
      특정 유형의 프로그램에 우선 순위를 부여하는 메커니즘
      I/O 집약적 프로세스CPU 집약적 프로세스보다 우선 순위가 높다.

실행

  • 초기에는 어셈블리어로 작성
      MS-DOS → Intel 8088 어셈블리어
  • 이제 C, C++와 같은 고급 언어로 작성
      리눅스, 윈도우
      속도 저하, 대용량 스토리지 요구사항 감소
      쓰기 쉽고 휴대성이 높음
  • OS의 성능
      어셈블리어 구현보다는 데이터 구조알고리즘이 중요
      메모리 관리, CPU 스케줄링 등

 


운영 체제 구조

단순구조

  • 인터페이스기능 수준이 잘 구분되어 있지 않다.
  • 애플리케이션은 I/O 루틴에 직접 액세스할 수 있다.
  • 응용 프로그램이 실패할 경우 전체 시스템 충돌이 발생할 수 있다.
  • 예) MS-DOS, 초기 UNIX

계층 구조

  • 여러 계층(레벨)
  • 맨 아래 계층(계층 0)은 하드웨어
  • 가장 높은 계층(계층 N-1)은 사용자 인터페이스
  • 디버깅하기는 쉽지만 계층정의하기는 어렵고 효율적이지 않다.

마이크로커널 구조

  • 커널에서 "사용자" 공간으로 이동
  • 메시지 전달이 있는 사용자 모듈 간의 통신
      예) 파일 서버를 통한 파일 액세스
  • 확장이식이 용이하다.
  • 신뢰할 수 있고 안전하다.(커널 모드에서 실행되는 코드 수 감소)
  • 성능 저하 : 사용자 모듈과 커널 간의 빈번한 통신 때문에
  • 예) Mach, QNX, Window NT

모듈 구조

  • 대부분의 현대 운영 체제는 커널을 모듈로 구현한다.
  • 객체 지향 접근법
  • 각 핵심 구성요소는 별도
  • 각각은 알려진 인터페이스를 통해 다른 사용자와 대화
  • 각각은 필요에 따라 커널에 로드
  • 예) Solaris, Linux, Mac OS X

 


시스템 부팅

커널 로드 방법

  • 부트로더(Bootloader) : 진단실행하고 시스템초기화
      커널을 찾아 메모리에 로드한 다음 시작
  • 소형 시스템 : 부트로더 및 OS를 ROM에 저장
  • 대형 시스템(예: PC) : 부트로더ROM에, OS디스크에 각각 저장
      부트 블록의 단순 부트로더 → 복잡한 부트로더 → 커널

 


Linux의 시스템 부팅

Linux 기반 PC의 시스템 부팅

  1. BIOS 실행
  2. 부트로더 실행(커널 적재)
  3. 커널 실행
  4. 루트 파일시스템 마운트 : 커널이 init, daemon, shell 등을 로딩

 


요약

  • 마이크로소프트 윈도우, 애플 맥 OS, 리눅스와 같은 현대 운영 체제CLI(명령줄 인터페이스)와 GUI(그래픽 사용자 인터페이스)를 모두 제공한다.
  • 시스템 콜은 프로세스와 운영 체제 간의 인터페이스이며 프로세스가 운영 체제에서 서비스를 요청하는 방법을 제공합니다.
  • 애플리케이션 프로그래머는 시스템 콜보다 API를 사용하는 방법을 이해해야 한다.
  • 현대의 운영 체제는 C나 C++와 같은 고급 언어로 작성된다.

'운영체제' 카테고리의 다른 글

[OS] 동기화 도구  (0) 2023.04.03
[OS] CPU 스케줄링  (0) 2023.03.27
[OS] 쓰레드와 프로세스  (0) 2023.03.20
[OS] 프로세스  (0) 2023.03.13
[OS] 정의, 구조, 작업, 구성 요소  (0) 2023.03.06

댓글