Operating Systems: An Overview

공부하자·2022년 10월 31일
0

시스템프로그래밍

목록 보기
7/11
post-custom-banner

What is and Operating System (OS)?

What is and Operating System (OS)?

  • A program that acts as an intermediary between applications and computer hardware
  • 응용 프로그램과 컴퓨터 하드웨어 간의 중개자 역할을 하는 프로그램

  • 1) Users
    • People, machines, other computers
    • Want to solve computing problems
  • 2) (Application) programs
    • Solve the computing problems of the users using computer resources
  • 3) Operating system
    • Controls and coordinates use of hardware among various applications and users
  • 4) Hardware
    • Provides basic computing resources
    • CPU, memory, I/O devices
  • 1) 사용자
    • 사람, 기계, 기타 컴퓨터
    • 컴퓨팅 문제를 해결하고자 함
  • 2) (어플리케이션) 프로그램
    • 컴퓨터 리소스를 사용하여 사용자의 컴퓨팅 문제 해결
  • 3) 운영 체제
    • 다양한 애플리케이션 및 사용자 간의 하드웨어 사용 제어조정
  • 4) 하드웨어
    • 기본 컴퓨팅 리소스 제공
    • CPU, 메모리, I/O 디바이스

OS: 애플리케이션과 하드웨어 사이 Control & Coordinates


  • No universally accepted definition
  • “Software that converts hardware into a useful form for applications”
  • “The one program so-called kernel running at all times on the computer”
    • Everything else is either
      • System programs (ships with the operating system)
      • Or application programs
  • 보편적으로 허용되는 정의 없음
  • "하드웨어애플리케이션에 유용한 형태로 변환하는 소프트웨어"
  • "컴퓨터에서 항상 실행되는 커널이라고 불리는 하나의 프로그램"
    • 다른 모든 것은 둘 중 하나이다.
      • 시스템 프로그램(운영 체제와 함께 제공)
      • 또는 응용 프로그램

커널 / 시스템프로그램 or 응용프로그램
kernel = operating system

Goals of Operating Systems

  • Provide an environment in which a user can execute user programs and make solving user problems easier
  • Make the computer system convenient to use
  • Use computer hardware in an efficient and safe manner
  • 사용자가 사용자 프로그램을 실행하고 사용자 문제를 보다 쉽게 해결할 수 있는 환경을 제공한다.
  • 컴퓨터 시스템을 편리하게 사용한다.
  • 효율적이고 안전한 방식으로 컴퓨터 하드웨어 사용

What Operating Systems Do

  • Application/user view
    • Want convenience, ease of use, and good performance
      • They don’t care about resource utilization
    • Provides an execution environment for running programs
    • Provides an abstract view of the underlying computer system
      • Processors -> Processes, threads
      • Memory -> Virtual memory address spaces
      • Storage -> Files, directories
      • I/O devices -> Files (ioctls)
      • Networks -> Files (sockets, pipes, …)
  • 응용 프로그램/사용자 측면
    • 편의성, 사용 편의성 및 우수한 성능을 원하는 경우
      • 리소스 활용에 관심이 없다.
    • 프로그램 실행을 위한 실행 환경 제공
    • 기본 컴퓨터 시스템의 추상 보기를 제공한다.
      • 프로세서 -> 프로세스, 스레드
      • 메모리 -> 가상 메모리 주소 공간
      • 저장소 -> 파일, 디렉터리
      • I/O 장치 -> 파일(ioctls)
      • 네트워크 -> 파일(소켓, 파이프 등)

[사용자 측면]
실행 환경 제공
abstract view 제공 (중요)


  • System view
    • Deal with many applications and users that compete with each other for resource use
      • … and make all of them happy
    • Resource manager
      • Manages various resources of a computer system
        » CPU, Memory, I/O devices, …
      • Decides between conflicting requests for efficient and fair resource use
    • Control program
      • Controls execution of programs to prevent errors and improper use of the computer
  • 시스템 뷰
    • 리소스 사용을 위해 서로 경쟁하는 많은 애플리케이션 및 사용자 처리
      • …그리고 그들 모두를 행복하게 한다.
    • 리소스 관리자
      • 컴퓨터 시스템의 다양한 리소스를 관리한다.
        » CPU, 메모리, I/O 디바이스 등
      • 효율적이고 공정한 리소스 사용을 위해 충돌하는 요청 간의 결정
    • 제어 프로그램
      • 오류 및 부적절한 컴퓨터 사용을 방지하기 위해 프로그램 실행을 제어한다.

[시스템 측면]
경쟁하는 애플리케이션/사용자 처리
리소스 관리
제어 프로그램

OS Services and Operations

Operating System Services

  • OS services provide functions that are helpful to the user:
  • OS 서비스는 사용자에게 유용한 기능을 제공한다.
  • User interface
    • Varies between Command-Line Interface (CLI), Graphics User Interface (GUI), etc.
  • 사용자 인터페이스
    • 명령줄 인터페이스(CLI), 그래픽 사용자 인터페이스(GUI) 등에 따라 다르다.
  • Program execution
    • Load a program into memory and run the program
    • End execution, either normally or abnormally (indicating error)
  • 프로그램 실행
    • 프로그램을 메모리에 로드하고 프로그램을 실행한다.
    • 정상 또는 비정상적으로 실행 종료(오류 표시)
  • I/O operations
    • A running program may require I/O, which may involve a file or an I/O device
  • I/O 작업
    • 실행 중인 프로그램에는 I/O가 필요할 수 있으며, 이는 파일 또는 I/O 장치를 포함할 수 있다.
  • File-system manipulation
    • Programs need to create, delete, read, and write files and directories
    • Search, list file information, permission management, …
  • 파일 시스템 조작
    • 프로그램에서는 파일 및 디렉터리를 생성, 삭제, 읽기 및 쓰기를 수행해야 한다.
    • 검색, 파일 정보 나열, 권한 관리 등
  • Communications
    • Processes may exchange information, on the same computer or between computers over a network
      » Via shared memory or through message passing (packets moved by the OS)
  • 통신
    • 프로세스는 네트워크를 통해 동일한 컴퓨터 또는 컴퓨터 간에 정보를 교환할 수 있다.
      » 공유 메모리 또는 메시지 전달(OS에서 패킷 이동)을 통해
  • Error detection
    • Constantly aware of possible errors
      » May occur in the CPU and memory hardware, in I/O devices, in user program
      » Take an appropriate action to ensure correct and consistent computing
      » Debugging facilities can greatly enhance the user’s and programmer’s abilities to efficiently use the system
  • 오류 감지
    • 발생할 수 있는 오류에 대한 지속적인 인식
      » CPU 및 메모리 하드웨어, I/O 장치, 사용자 프로그램에서 발생할 수 있음
      » 정확하고 일관된 컴퓨팅을 보장하기 위해 적절한 조치를 취한다.
      » 디버깅 기능은 사용자와 프로그래머가 시스템을 효율적으로 사용할 수 있는 능력을 크게 향상시킬 수 있다.

User Interface, Program execution, I/O operations, File-system manipulation, Communications, Error detection


  • Another set of OS functions exists for ensuring the efficient operation of the system itself via resource sharing
    • Resource allocation
      • When multiple users or multiple jobs run concurrently, resources must be allocated to each of them
      • Many types of resources - CPU cycles, main memory, file storage, I/O devices
    • Accounting
      • Keep track of which users use how much and what kinds of computer resources
    • Protection and security
      • Protection involves ensuring that all access to system resources is controlled
      • Security of the system from outsiders requires user authentication, and extends to defending external I/O devices from invalid access attempts
  • 리소스 공유를 통해 시스템 자체의 효율적인 운영을 보장하기 위한 또 다른 OS 기능 세트가 존재한다.
    • 자원 할당
      • 여러 사용자 또는 여러 작업을 동시에 실행하는 경우 리소스를 각 사용자에게 할당해야 한다.
      • CPU 주기, 기본 메모리, 파일 스토리지, I/O 장치 등 다양한 유형의 리소스
    • 회계
      • 어떤 사용자가 얼마나 많은 컴퓨터 리소스를 사용하고 어떤 종류의 컴퓨터 리소스를 사용하는지 추적
    • 보호 및 보안
      • 보호에는 시스템 리소스에 대한 모든 액세스 제어가 포함된다.
      • 외부로부터의 시스템 보안은 사용자 인증이 필요하며, 잘못된 액세스 시도로부터 외부 I/O 장치를 보호하는 것으로 확장된다.

Resource allocation, Accounting, Protection and security

How Computer Systems Work

Computer System Organization

  • One or more CPUs and device controllers are connected through a common bus providing access to the main memory
  • Concurrent execution of CPUs and devices compete for memory cycles
  • 하나 이상의 CPUdevice controllerscommon bus를 통해 연결되어 기본 메모리에 액세스할 수 있다.
  • CPU와 장치의 동시 실행으로 메모리 주기 경쟁

common bus로 연결되어 기본 메모리에 억세스. 주기 경쟁

Computer System Operation

  • Each device controller is in charge of a particular device type
  • Each device controller has a local buffer
  • I/O is data transfer from the I/O device to the controller or vice versa
  • CPU moves data from the controller to the main memory or vice versa
  • 장치 컨트롤러는 특정 장치 유형을 담당한다.
  • 각 디바이스 컨트롤러에는 로컬 버퍼가 있다.
  • I/O는 I/O 장치에서 컨트롤러로 또는 그 반대의 데이터 전송이다.
  • CPU가 컨트롤러에서 메인 메모리로 또는 그 반대로 데이터를 이동한다.

local buffer 존재

컴퓨터 시스템의 구성. CPU와 device controller들이 bus로 연결되어 있어서 main memory를 같이 사용한다.
local buffer가 있어서 잠깐 데이터를 저장할 수 있다.

Programmed I/O (a.k.a. polling)

  • CPU repeatedly checks the state of an I/O device through a device controller
    • e.g., whether the requested I/O operation is completed…
  • If its state is ready, CPU directly moves data required for an I/O operation
  • CPU must always be involved in I/O operation handling -> CPU resource can be used inefficiently
    • CPU may waste substantial time waiting for I/O devices to be ready (busy waiting)
  • CPU가 디바이스 컨트롤러를 통해 I/O 디바이스 상태를 반복적으로 확인한다.
    • 예를 들어, 요청된 I/O 작업이 완료되었는지 여부
  • 상태가 준비되면 CPU가 I/O 작업에 필요한 데이터를 직접 이동한다.
  • CPU는 항상 I/O 작업 처리에 관여해야 한다. -> CPU 리소스가 비효율적으로 사용될 수 있다.
    • CPU가 I/O 장치가 준비될 때까지 대기하는 데 상당한 시간을 낭비할 수 있다.(대기 중)

I/O device 상태를 반복적으로 확인
준비되면 CPU가 I/O 작업에 필요한 데이터 직접 이동
항상 I/O 작업 처리에 관여해야 함

cpu가 계속 I/O device의 상태를 체크한다. controller에 데이터가 도착했는지 물어본다. program의 instruction을
cpu cycle을 소모한다. 효율적이지 못하다. 이러한 상태를 busy waiting 상태라고 한다.

Interrupt-driven I/O

  • Device controller notifies CPU of events by generating an interrupt
    • When an incoming event occurs in an I/O device
    • Or when a device controller has finished I/O operation
  • 장치 컨트롤러가 인터럽트를 생성하여 CPU에 이벤트를 알린다.
    • I/O 장치에서 수신 이벤트가 발생하는 경우
    • 또는 장치 컨트롤러가 I/O 작업을 완료한 경우

Interrupt 생성 :
I/O 장치 수신 혹은 device controller I/O 작업 완료

데이터가 넘어오는 동안에 기다릴 필요가 없어서 더 효과적이다.

Interrupt Handling Process

    1. OS preserves the current state of the CPU
    • To come back after handling the interrupt
    • Save registers and the address of the interrupted instruction to the memory
    1. Jumps to a designated interrupt service routine (called interrupt handler)
    • Interrupt vector contains the addresses of all the service routines
    1. Return to the last state by restoring the registers
    1. OS가 CPU의 현재 상태를 유지한다.
    • 인터럽트를 처리한 후 다시 돌아와라.
    • 레지스터 및 중단된 명령의 주소를 메모리에 저장한다.
    1. 지정된 인터럽트 서비스 루틴(인터럽트 핸들러라고 함)으로 이동한다.
    • 인터럽트 벡터에 모든 서비스 루틴의 주소가 포함되어 있다.
      1. 레지스터를 복원하여 마지막 상태로 돌아간다.

CPU 유지 및 중단된 주소 저장 -> 인터럽트 서비스 루틴으로 이동 -> 레지스터 복원

Operating System Operations

  • An operating system is interrupt driven
    • Hardware interrupt generated by hardware devices (I/O devices)
      • Asynchronous event -> independent on a currently-executing process
    • Software interrupt generated by executing instructions
      • Synchronous event -> always generated by a currently-executing process
      • Software error (e.g., division by zero), request for operating system service, etc.
  • 운영 체제가 인터럽트로 구동된다.
    • 하드웨어 디바이스(I/O 디바이스)에서 생성된 하드웨어 인터럽트
      • 비동기 이벤트 -> 현재 실행 중인 프로세스에 독립적이다.
    • 명령을 실행하여 생성된 소프트웨어 중단
      • 동기 이벤트 -> 현재 실행 중인 프로세스에서 항상 생성된다.
      • 소프트웨어 오류(예: 0으로 나누기), 운영 체제 서비스 요청 등

운영체제 interrupt
HW interrupt (실행중인 프로세스와 별개로 발생할 수 있다. asynchronous한 외부 이벤트에 의해 (ex키보드)
(software interrupt는 cpu에 의해 발생한다.)

Multiprogramming

  • One of the most important aspects of OS is the ability to run multiple programs
  • Multiprogramming needed for efficiency
    • A single program cannot keep either CPU or I/O devices busy at all times
    • Multiprogramming organizes jobs (code and data) so that CPU always has one to execute (= never idle)
    • A subset of total jobs in system is kept in memory
    • One job selected and run via job scheduling
    • When it has to wait for I/O, OS switches to another job
  • OS의 가장 중요한 측면 중 하나는 여러 프로그램을 실행할 수 있는 기능이다.
  • 효율성을 위해 멀티프로그래밍이 필요하다.
    • 단일 프로그램으로 CPU 또는 I/O 장치를 항상 사용할 수 없다.
    • 멀티프로그래밍은 작업(코드 및 데이터)을 구성하여 CPU에 항상 실행할 작업이 있다(= 유휴 상태가 아님).
    • 시스템의 전체 작업의 하위 집합이 메모리에 유지됩니다.
    • 작업 스케줄링을 통해 하나의 작업을 선택하고 실행한다.
    • I/O를 기다려야 하는 경우 OS가 다른 작업으로 전환된다.

효율성을 위해 멀티프로그래밍 필요
job scheduling

run multiple program concurrently.
동시 실행시키는 모델.

Multitasking

  • Multitasking (Time sharing) is a logical extension of multiprogramming in which CPU switches jobs frequently so that users can interact with each running job, creating interactive computing
    • Response time should be < 1 second
    • If several jobs are ready to run at the same time  CPU scheduling
      • Each job is given a time slice
      • Run a job for a time slice and then switches to the next job
  • 멀티태스킹(시분할)은 CPU가 작업을 자주 전환하여 사용자가 실행 중인 각 작업과 상호 작용할 수 있도록 하는 멀티프로그래밍의 논리적 확장으로 인터랙티브 컴퓨팅을 생성한다.
  • 응답 시간은 1초 미만이어야 한다.
  • 여러 작업을 동시에 실행할 준비가 된 경우 » CPU 스케줄링
    • 각 작업에는 시간 슬라이스가 제공된다.
    • 타임슬라이스 작업을 실행한 후 다음 작업으로 전환

multitasking -> interactive computing
CPU scheduling, time slice


multiprogramming을 logical하게 확장했다. time slice라는 실행 슬롯을 정해준다.
cpu 시간이 있으면 이를 여러 job들에게 나누어주는 방식이다.
스케쥴링이 빠르게 이루어지고 있는데 사용자 입장에서는 마치 동시에 동작하는 듯한 illusion을 가질 수 있다.
multitasking이 default로 적용이 되고 여러 프로그램을 interactive하게 사용할 수 있다. 이를 interactive computing이라고 한다. 각 job에 대한 response time이 1초보다 적어야 한다. 입력을 줬을 때 응답이 오기까지의 시간이 1초 이내여야 한다.

System Calls

Protecting the System

  • How can OS prevent user applications from harming the system?
    • What if an application accesses disk drive directly?
    • What if an application overrides interrupt handlers for keyboard?
    • What if an application executes the HLT instruction?
  • OS는 어떻게 사용자 애플리케이션이 시스템을 해치는 것을 방지할 수 있는가?
    • 애플리케이션이 디스크 드라이브에 직접 액세스하는 경우 어떻게 되는가?
    • 응용 프로그램이 키보드의 인터럽트 핸들러를 재정의하면 어떻게 되는가?
    • 애플리케이션이 HLT 명령을 실행하면 어떻게 되는가?

HLT instruction, break down entire computer system


  • CPU operates in “user mode” or “kernel mode
    • Allows OS to protect itself and other system components
      • Separate critical things from general things
    • Mode bit (provided by hardware) allows to distinguish on which mode the system is running
    • All privileged instructions are only executable in the kernel mode
      • E.g., HLT in x86
  • Modern CPUs support more than two modes (i.e., multi-mode operations)
    • i.e. virtual machine manager (VMM) mode for guest VMs
    • VMs should be limited to its space for memory access
  • CPU가 "사용자 모드" 또는 "커널 모드"에서 작동한다.
    • OS가 자신과 다른 시스템 구성요소를 보호할 수 있도록 허용
      • 중요한 것과 일반적인 것을 분리한다.
    • 모드 비트(하드웨어에서 제공)를 통해 시스템이 실행 중인 모드를 구분할 수 있다.
    • 모든 권한 있는 명령은 커널 모드에서만 실행 가능합니다.
      • 예: x86의 HLT
  • 최신 CPU는 두 가지 이상의 모드(즉, 다중 모드 작동)를 지원한다.
    • 즉, 게스트 VM의 VMM(가상 시스템 관리자) 모드
    • VM은 메모리 액세스를 위한 공간으로 제한되어야 한다.

dual-mode operation을 제공해준다.
privileged instructions (HLT)
컴퓨터 시스템은 계층적으로 생각해볼 수 있다. 유저 모드에서는 유저 프로세스만 실행이 될 수 있다. 유저 프로세스는 커널이나 하드웨어 파트 영역으로는 직접적인 접근을 할 수 없다. privileged instruction에 접근할 수 없다. privileged instruction은 권한이 높은 중요한 instruction을 말한다. mode bit로 dual mode를 구분한다.
요즘에는 더 많은 모드를 지원한다. OS Virtualization으로 가상화를 진행한다. 하나의 physical computer에서 여러 개의 가상 머신을 돌린다. hw가 각각 한 개씩 있는 것처럼 보여줘야 한다. 이를 가상화라고 한다. 자기 혼자 hw를 사용하는 것 같은 illusion을 가지게 된다. vmm은 중재를 도와준다. vmm의 권한이 높고 kernel process 이렇게 권한이 높다. 이를 execution mode로 구분한다.

Privileged Instructions

  • A set of instructions that should be executed carefully
    • Direct I/O access
      • E.g., IN/OUT instructions in IA-32
    • Accessing/manipulating system registers
      • Control registers
      • Interrupt service routine table
    • Memory state management
      • Page table updates, page table pointers, TLB loads, etc
    • HLT instruction in IA-32
  • Executable in the kernel mode
    • May generate an exception if an application tries to run a privileged instruction in user mode
  • 신중하게 실행해야 하는 일련의 지침
    • 직접 I/O 액세스
      • 예: IA-32의 IN/OUT 지침
    • 시스템 레지스터 액세스/조작
      • 제어 레지스터
      • 서비스 루틴 테이블 중단
    • 메모리 상태 관리
      • 페이지 테이블 업데이트, 페이지 테이블 포인터, TLB 로드 등
    • IA-32의 HLT 명령어
  • 커널 모드에서 실행 가능
    • 응용 프로그램이 사용자 모드에서 권한 있는 명령을 실행하려고 하면 예외가 발생할 수 있다.

Privileged Instructions : Direct I/O access, Accessing/manipulating system registers, Memory state management, HLT instruction in IA-32

Interrupt vs. Exception

  • Exception (= Software interrupt)
    • Generated by executing instructions
      • Software error (e.g., division by zero), unauthorized access of data, request for operating system service, …
    • Synchronous
      • Happens when CPU executes an instruction
    • Trap(expected, intended) or fault(unexpected)
    • Handled like interrupts
  • C.f., interrupt (= Hardware interrupt)
    • Generated by hardware devices
    • Occurs asynchronously (at any time)
  • Modern OSes are interrupt(including exception)-driven
    • The transition from user mode to kernel mode is done via interrupt or exception
  • 예외(= 소프트웨어 인터럽트)
    • 명령을 실행하여 생성됨
      • 소프트웨어 오류(예: 0으로 나누기), 데이터 무단 액세스, 운영 체제 서비스 요청 등
    • 동기식
      • CPU가 명령을 실행할 때 발생한다.
    • Trap(예상, 의도) 또는 fault(예상치 못한)
      • 인터럽트처럼 처리된다.
  • C.F., 인터럽트(= 하드웨어 인터럽트)
    • 하드웨어 장치에서 생성됨
    • 비동기적으로(언제든지) 발생
  • 최신 OS는 인터럽트(예외 포함) 중심입니다.
    • 사용자 모드에서 커널 모드로의 전환은 인터럽트 또는 예외를 통해 수행된다.

Exception = Software interrupt
-> 명령, 동기식(synchronous), CPU가 명령 실행, Trap of fault
Interrupt = Hardware interrupt
-> 비동기적 (asynchronous)

Transition from User to Kernel Mode

  • By interrupt
    • Asynchronous
    • E.g., Timer
      • In the kernel mode, OS set a timer to generate an interrupt after some time period (privileged instruction)
      • In the user mode, an application process keeps using the CPU
      • The timer generates a timer interrupt when the timer expires
        » Switched to the kernel mode
      • The OS can make a decision on the process
  • interrupt에 의해
    • Asynchronous
    • E.g., Timer
      • 커널 모드에서 OS는 일정 시간 후에 인터럽트를 생성하는 타이머를 설정한다(특권 명령).
      • 사용자 모드에서는 애플리케이션 프로세스가 CPU를 계속 사용한다.
      • 타이머가 만료되면 타이머 인터럽트가 발생한다.
        » 커널 모드로 전환됨
      • OS가 프로세스에 대한 결정을 내릴 수 있습니다.

interuupt, asynchronous, timer
다음 프로세스를 정해주는 timer


  • By system call
    • synchronous
  • system call에 의해
    • 동기식

system call은 exception의 하나의 예제이다.

System Calls

  • Programming interface to the services provided by the OS
  • Typically written in a high-level language (C/C++)
  • Mostly accessed by programs via a high-level Application Programming Interface (API) rather than direct system call use
  • Most common APIs
    • Win32 API for Windows variants
    • POSIX API for POSIX-based systems
      • Virtually include all versions of UNIX, Linux, and Mac OSX
    • Java API for the Java virtual machine (JVM)
  • OS에서 제공하는 서비스에 대한 프로그래밍 인터페이스
  • 일반적으로 고급 언어(C/C++)로 작성된다.
  • 대부분의 프로그램이 직접 시스템 호출 사용이 아닌 고급 API(Application Programming Interface)를 통해 액세스한다.
  • 가장 일반적인 API
    • Win32 API for Windows 버전
    • POSIX 기반 시스템용 POSIX API
      • UNIX, Linux 및 Mac OSX의 모든 버전 포함
    • Java 가상 시스템(JVM)용 Java API

system call의 역할은 os가 제공하는 서비스를 제공하기 위한 programming interface의 역할을 말한다. 직접 호출하기보다는 high-level API를 사용한다.

A View of Operating System Services

Typees of System Calls

  • Process control
    • create process, terminate process
    • end, abort
    • load, execute
    • get process attributes, set process attributes
    • wait for time
    • wait event, signal event
    • allocate and free memory
    • dump memory if error
    • debugger for determining bugs, single step execution
    • locks for managing access to shared data between processes
  • process 관리
    • 프로세스 생성, 프로세스 종료
    • 종료, 중단
    • 로드, 실행
    • 프로세스 특성 가져오기, 프로세스 특성 설정
    • 시간을 기다리다
    • 대기 이벤트, 신호 이벤트
    • 메모리 할당 및 사용 가능
    • 오류가 발생하면 메모리 덤프
    • 버그를 확인하기 위한 디버거, 단일 단계 실행
    • 프로세스 간 공유 데이터에 대한 액세스 관리를 위한 잠금
  • File management
    • create file, delete file
    • open, close file
    • read, write, reposition
    • get and set file attributes
  • 파일 관리
    • 파일 생성, 파일 삭제
    • 파일 열기, 닫기
    • 읽기, 쓰기, 재배치
    • 파일 특성 가져오기 및 설정
  • Device management
    • request device, release device
    • read, write, reposition
    • get device attributes, set device attributes
    • logically attach or detach devices
  • 장치 관리
    • 요청 장치, 릴리스 장치
    • 읽기, 쓰기, 재배치
    • 장치 특성 가져오기, 장치 특성 설정
    • 논리적으로 장치 연결 또는 분리
  • Information maintenance
    • get time or date, set time or date
    • get system data, set system data
    • get and set process, file, or device attributes
  • Communications
    • create, delete communication connection
    • send, receive messages (message passing model)
    • create and gain access to memory regions (shared memory model)
    • transfer status information
    • attach and detach remote devices
  • 정보 유지보수
    • 시간 또는 날짜 가져오기, 시간 또는 날짜 설정
    • 시스템 데이터 가져오기, 시스템 데이터 설정
    • 프로세스, 파일 또는 장치 특성 가져오기 및 설정
    • 통신
    • 통신 연결 만들기, 삭제
    • 메시지 보내기, 받기(통과 모델 포함)
    • 메모리 영역 생성 및 액세스(공유 메모리 모델)
    • 상태 정보 전송
    • 원격 장치 연결 및 분리
  • Protection
    • Control access to resources
    • Get and set permissions
    • Allow and deny user access
  • 보호
    • 리소스 액세스 제어
    • 권한 가져오기 및 설정
    • 사용자 액세스 허용 및 거부

세세하게 기억할 필요는 없다. 다만 high level category 정도만 기억하면 된다. (process control, file management, device management, information maintenance, communications, protection

Example of System Calls

  • System call sequence to copy the contents of one to another file
  • 한 파일의 내용을 다른 파일로 복사하는 시스템 호출 시퀀스

Windows and UNIX System Calls

Standard C Library Example

  • C program invoking printf() library call, which calls write() system call
  • write() 시스템 호출을 호출하는 printf() 라이브러리 호출을 호출하는 C 프로그램

Example of POSIX API

$ man read

제공되는 function이 많다. 잘 모르는 function을 보게 되면 man command로 바로 확인할 수 있다.

System Call Implementation

  • Typically, each system call is associated with an unique number (system call number)
    • System-call interface maintains a table indexed according to these numbers
  • The system call interface invokes the intended system call in OS kernel and returns status of the system call and any return values
  • The caller need know nothing about how the system call is implemented
    • Just needs to obey API and understand what OS will do for system call
    • Most details of OS interface are hidden from programmer by API
  • 일반적으로 각 시스템 호출은 고유 번호(시스템 호출 번호)와 연결된다.
    • 시스템 호출 인터페이스는 이 숫자에 따라 색인화된 테이블을 유지한다.
  • 시스템 호출 인터페이스는 OS 커널에서 의도된 시스템 호출을 호출하고 시스템 호출의 상태 및 반환 값을 반환한다.
  • 호출자는 시스템 호출이 구현되는 방법에 대해 아무것도 알 필요가 없다.
    • API를 준수하고 OS가 시스템 호출을 위해 수행할 작업을 이해하기만 하면 된다.
    • OS 인터페이스의 대부분 세부 정보는 API에 의해 프로그래머에게 숨겨진다.

system call table이 system routine의 주소값을 가지고 있다. 어떤 system call을 호출하는지 number까지 함께 넘어오고 요구하는 system call의 위치를 os가 찾게 된다. 번호가 i라는 애를 찾으면 i번째 entry에서 system call routine의 주소를 얻어서 jump할 수 있다.

프로그래머는 시스템 호출 구현 방법을 몰라도 된다.

System Call Parameter Passing

  • Often, more information (i.e., parameters) is required than simply the identity of desired system call
    • Exact type and amount of information vary according to OS and system call
  • Three general methods used to pass parameters to the OS
    • 1) Simplest approach: pass the parameters in registers
      • However, in some cases, there may be more parameters than registers
    • 2) Parameters are stored in a block (or table) in memory, and the address of the block is passed as a parameter in a register
      • This approach is taken by Linux and Solaris
    • 3) Parameters are pushed onto the stack by the user program and popped off the stack by the operating system
      ※ Block and stack methods do not limit the number or length of parameters being passed
  • 종종 단순히 원하는 시스템 호출의 ID보다 더 많은 정보(즉, 매개변수)가 필요하다.
    • 정확한 정보 유형 및 양은 OS 및 시스템 호출에 따라 다르다.
  • OS에 파라미터를 전달하는 데 사용되는 세 가지 일반적인 방법
    • 1) 가장 간단한 접근법: 레지스터에 파라미터 전달
      • 그러나 경우에 따라 레지스터보다 더 많은 매개 변수가 있을 수 있습니다.
    • 2) 파라미터는 메모리의 블록(또는 테이블)에 저장되며, 블록의 주소는 레지스터의 파라미터로 전달된다.
      • 이 접근 방식은 Linux 및 Solaris에서 취합니다.
    • 3) 파라미터는 사용자 프로그램에 의해 스택에 푸시되고 운영 체제에 의해 스택에서 분리됩니다.
      ※ 블록 및 스택 메서드는 전달되는 매개 변수의 수 또는 길이를 제 한하지 않습니다.

종종 parameter가 필요하다.

1) register에 parameter 전달하는 방법. register 개수가 한정적이라서 general하게 쓰기는 어렵다.
2) memory 공간을 할당받고 필요한 parameter들을 전부 저장한 후에 block의 주소값을 register에 넘겨주는 방법
3) stack area를 사용하는 방법. 각 프로세스마다 자신의 stack area stack에 필요한 parameter을 저장해두고 os가 popped off. 크기 제약이 없다.

Parameter Passing via Memory Block

memory block. 그림으로 이해하면 된다.

profile
아주대학교 수업 기록
post-custom-banner

0개의 댓글