[운영체제] System call

정태규·2023년 4월 13일
0

운영체제

목록 보기
3/20

Privileged Instructions

조심스럽게 실행해야 되는 instruction 집합이다.
그만큼 중요한 instruction들 이라는 것이다. 잘못 만지면 컴퓨터에 심각한 이상증상을 초래 할 수 있다. 그래서 아무나 실행할 수 없는 instruction 이다.

  • 시스템 레지스터 접근/조작

    interrupt descripter table
    Control registers

  • I/O 에 직접 접근

    ex) IN/OUT instructions in IA-32

  • memory 상태관리

    page table update, page table pointers, TLB loads, etc..

  • HLT instruction in IA-32

Multi-mode CPU

  • CPU는 두가지 mode가 있다.

    user mode, kernel mode
    user mode는 privileged 빼고 실행 가능하고 kernel mode는 전부다 실행 가능하다.

  • privileged instruction들은 kernel mode 에서만 실행된다.

    만약 user mode에서 privileged instruction을 실행하려고 하면 exception이 발생할 것이다.

  • OS가 자신과 다른 시스템 구성요소들을 지키게 한다.

    일반적인 것과 치명적인 것들을 분리시켜준다.

  • 현대 CPU는 2가지 더많은 모드가 지원된다.

    guest VM들을 위한 위한 virtual machine manager(VMM)mode도 있다.
    VMs은 메모리 접근 공간이 제한 되어야 한다.

User mode에서 kernel Mode로 바꾸기

  • interrupt

    보통 하드웨어에서 일어난다.
    비동기이다(언제든지 발생할 수 있다)
    interrupt handler로 이동하기 전에 kernel mode로 바뀐다.
    비동기: 동시에 여러개가 실행 가능, 응답이돌아오기 전에 요청가능

  • system call

    동기이다.(명시적으로 요청할 경우 일어날 수 있다.)
    소프트웨어에 의해 일어난다.
    동기: 동시에 여러개가 실행될 수 없다. 응답이 들어오면 요청가능

CPU가 interrupt를 잡아서, interrupt handler로 보낸다.

interrupt handler는 kernal mode에서 실행된다.
interrupt handler가 끝나면 다시 user mode로 돌아간다.

Interrupt vs Exception

  • Interrupt

    hardware device에 의해 생긴다.
    asynchronous(비동기)(아무때나 가능)

  • Exception

    • software 실행 instruction에 의해 생성된다.
    • software err(e.g..division by zero), 허가되지않은 데이터 접근, 운영체제 서비스 요청 등
    • synchronous(동기):CPU가 instruction을 실행했을때 발생
    • trap(expected,intende) 나 fault(unexpected)로 분류된다.
    • interrupt처럼 다뤄진다.

System calls

  • OS에서 제공하는 서비스에 대한 프로그래밍 인터페이스이다.

  • 일반적으로 high level language이다(c/c++)

  • 대부분 직접적인 system call 사용 보다는 high-level API을 통한 프로그램에 의해 접근 된다.

  • 가장 많은 공통 API

    POSIX: Portable OS Interface
    UNIX,LINUX,Mac OSX모두를 포함하는 버전이다.

  • window 위한 Win32 API

  • java virtual machine(JVM)위한 JAVA API

  • system call에 의한 user mode -> kernal mode

위 그림에서 볼 수 있듯이 user process에서 system call을 부르면 mode bit= 0이되어, kernal 모드로 switch 된다.
system call을 실행하고 나서는 mode bit = 1이 되어, 다시 user mode로 return 된다.

OS가 제공하는 services

  • Operating System(운영체제)의 전체적인 view

program execution

  • program을 memory 안으로 load하고 program을 실행한다.
  • 정상혹은 비정상으로 프로그램 종료(error 지칭)

I/O operations

  • 실행중인 프로그램은 I/O를 필요 할 수 있고, 파일이나 I/O 장치가 포함될 수 있다.

file-system manipulation

  • 프로그램들은 파일이나 디렉토리를 create,delete,read,write 하는 것이 필요하다.
  • 검색 ,파일 정보 나열, 권한 관리 등등

communications

  • processes는 같은 컴퓨터 내에서나 네트워크를 통한 다른 컴퓨터와 정보를 교환할수도 있다.
  • 메모리 공유 혹은 메세지 보내는것(패킷은 OS에 의해 움직인다.)

Error 감지

  • 가능한 에러를 지속적으로 인지한다.

    user program안의 CPU나 memory hardware, I/O 장치 내에서 일어날 수 있다.
    올바르고 일관적인 연산을 수행하기 위해 적절한 액션을 취한다.
    디버깅 기능은 시스템을 사용하는 유저들이나 프로그래머들의 능력을 크게 향상 시킬 수 있도록 해준다.

Resource 할당

  • 다수의 사용자나 다수의 업무들이 동시에 수행될때, 리소스는 각각에게 할당되어야 한다.
  • 리소스 타입: CPU cycles,main memory,file storage,I/O device

Accounting

  • 어떤 유저가 얼마나 많이, 어떤 종류의 컴퓨터 리소스를 사용했는지 추적한다.

보안,보호

types 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

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 if message passing model to host name or
process name
– Shared-memory model create and gain access to memory regions
– transfer status information
– attach and detach remote devices

Protection

– Control access to resources
– Get and set permissions
– Allow and deny user access

Standard C Library Example

C program이 printf() library 를 호출하면, library는 write() system call을 호출한다.

OS 관계도

user application(user mode)에서 open()을 호출하면 kernel mode로 바뀌고
system call interface에서 open()이라는 함수를 찾아 실행한후 return 값을 다시 system call interface로 보내준다. 그럼 system call interface가 다시 user application으로 return 값을 보내준다.

리눅스 커널에서는 위 그림처럼 syscall 함수가 저장되어 있다.

system call 실행

  • 옛날 방식은 현대 구조에는 너무 느리다.

    interrupt service 루틴은 몇몇 일관성과 보안성 체크를 한다. 이게 system call을 느리게 만든다. (Meltdown의 취약점)
    intel은 "fast system call"이라는 기능을 제공한다. 이 기능은 최적화된 system call을 호출을 제공하는 하드웨어 최적화이다.

0개의 댓글