CS/OS

[OS] - OS Structure(1) : System Call

JWonK 2023. 3. 18. 13:05
728x90
반응형

운영 시스템의 구조(Operating-System Structures)가 무엇인지 알아본다.

 

- 운영체제가 사용자, 프로세스, 다른 시스템에 어떤 서비스를 제공하는지 공부하는 것이 목표

- 운영 체제 시스템의 구조를 다양한 모습으로 확인

- 어떻게 설치하고 부팅하는지 환경에 맞게 관리하는 지에 대한 방법

 

Operating System Services

운영체제가 제공하는 서비스

  • User interface - CLI, GUI, Batch
  • Program excution - 프로그램 실행에 관련된 서비스 : 메모리를 통해 load, 프로그램 run, 실행 end (정상 또는 비정상)
  • I/O Opertions - 입/출력에 대한 서비스 제공
  • File-System - 파일이나 디렉토리 생성/제거/검색/읽기/쓰기/리스트/접근 권한
  • Communications - 한 프로그램과 다른 프로그램 또는 네트워크 또는 컴퓨터 사이의 통신에 대한 서비스 제공
    • 1) Shared memory : 두 개의 프로세스 간 공유할 수 있는 메모리 영역을 지정, 그곳에서 통신
    • 2) Message Passing : OS사이에서 packets 움직임을 통해 공유
  • Error detection - 여러 유형의 에러(하드웨어, I/O, User Program 등)가 발생하면 발생한 곳에서 Interrupt가 발생하게 되고 운영 체제는 어떤 Interrupt가 발생했는지 찾고 그것을 해결해주는 소프트웨어(Interrupt Service Routine)을 실행시켜 에러 처리
  • Debugging - 발생한 에러 수정

 

 

아래는 효율적인 시스템을 위해 운영체제가 제공하는 서비스이다.

  • Resource Allocation - 자원 할당과 관련된 서비스
  • Accounting - 컴퓨팅 자원을 누가 얼마나 사용했는지 기록, 그 기록을 이용하여 성능 확장에 고려
  • Protection and Security(보호/보안) - 컴퓨팅 접근에 대해 보호와 인증을 통한 보안

 

 

  User Operating System Interface - CLI

두 가지로 구현될 수 있다.

1) 이미 컴파일 된 채로 존재 -> Built-In : 편리성에 강점

2) 시스템 프로그램 형태로 만들어서 특정 디렉터리 내부에 저장 -> Kernel : 속도측면에서 강점

 

 

 

  User Operating System Interface - GUI

아이콘을 이용한 파일,프로그램,액션

ex) MS GUI with CLI, Apple Mac OS x as "Aqua" GUI interface with UNIX kernel

 

 

  System Calls

  • 운영 체제에서 제공하는 서비스들에 대한 Programming Interface
  • C/C++로 많이 만들어짐
  • 실제 사용할 때 직접 호출하지는 않고 API를 이용하여 사 ex) Win32 API, POSIX API, Java API

 

Example of System Calls

 

 

H예시

Handle - 읽어올 파일 명

LPVOID - 읽어올 때 사용할 버퍼 지정

DWORD - 지금까지 읽어 온 데이터 양 byte 단위

LPDWORD - 지금까지 얼마나 읽었나

LPOVERLAPPED - 버퍼에 존재하는 지금까지 읽은 데이터를 어떻게 할건지 표시

 

 

 

 

  • 시스템 내부에서 System Call의 이름을 번호로 연관 지어 테이블 인덱스로 저장한다. 그리고 사용해야 하는 인덱스 번호가 주어질 경우 그 테이블에서 search하여 접근할 수 있다. 오른쪽 상단 왼쪽 아래 테이블 접근에 대한 그림

 

 

  1. User Application에서 실행이 시작된다.
  2. 프로그램이 실행. 내부에 funtion이 실행되어야하고 (위에서 C's printf()) 실행을 위해 standard C library에 접근
  3. 내부적으로 이제 write()라는 System Call을 호출하게 된다.
  4. 위의 System Call에 대한 세부적인 내용이 왼쪽 화살표로 이동한 전 슬라이디에서 말한 System Call을 번호로 지정하여 테이블 인덱스로 저장한 그림
  5. System Call의 번호를 이용하여 내부적으로 메모리를 통해 실행한다.
  6. 최종적으로 반환된 (bool 형태) 값을 User application으로 반환 (그것이 printf())

 

 

 

위 슬라이드의 전전전슬라이드에서 보면 System Call을 위해 많은 파라미터를 함께 넘겨주어야 한다.

그 파라미터를 넘겨주는 방식은 크게 3가지로 볼 수 있다.

  1. Register - CPU가 가지고 있는 레지스터 중 일부를 이용하여 전달
  2. 메모리 내부에서 block을 정해놓고 그 내부에 전달해야하는 파라미터를 전달
  3. Stack을 이용

Block 또는 Stack 방식은 파라미터의 길이나 수에 제한이 없다.

 

 

위 예시를 통해 알아보자

  1. X번지에 전달해줘야 하는 파라미터가 존재
  2. load address X : 메모리에 파라미터를 갖고 있는 시작 주소(X번지) 특정 레지스터를 이용하여 전달
  3. System call 13 : 13번 system call 호출 (중간 아래 빨간 박스 내부 그림에 해당)
  4. 오른쪽 박스 그림처럼 X라는 주소값과 함께 전달

 

 

 

  Types of System Calls

  • Process Control
  • File Management
  • Device Management
  • Information maintenance
  • Communications

크게 5가지 유형의 System Call이 존재

Types of System Calls

 

728x90
반응형