운영 시스템의 구조(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
Handle - 읽어올 파일 명
LPVOID - 읽어올 때 사용할 버퍼 지정
DWORD - 지금까지 읽어 온 데이터 양 byte 단위
LPDWORD - 지금까지 얼마나 읽었나
LPOVERLAPPED - 버퍼에 존재하는 지금까지 읽은 데이터를 어떻게 할건지 표시
- 시스템 내부에서 System Call의 이름을 번호로 연관 지어 테이블 인덱스로 저장한다. 그리고 사용해야 하는 인덱스 번호가 주어질 경우 그 테이블에서 search하여 접근할 수 있다. 오른쪽 상단 왼쪽 아래 테이블 접근에 대한 그림
- User Application에서 실행이 시작된다.
- 프로그램이 실행. 내부에 funtion이 실행되어야하고 (위에서 C's printf()) 실행을 위해 standard C library에 접근
- 내부적으로 이제 write()라는 System Call을 호출하게 된다.
- 위의 System Call에 대한 세부적인 내용이 왼쪽 화살표로 이동한 전 슬라이디에서 말한 System Call을 번호로 지정하여 테이블 인덱스로 저장한 그림
- System Call의 번호를 이용하여 내부적으로 메모리를 통해 실행한다.
- 최종적으로 반환된 (bool 형태) 값을 User application으로 반환 (그것이 printf())
위 슬라이드의 전전전슬라이드에서 보면 System Call을 위해 많은 파라미터를 함께 넘겨주어야 한다.
그 파라미터를 넘겨주는 방식은 크게 3가지로 볼 수 있다.
- Register - CPU가 가지고 있는 레지스터 중 일부를 이용하여 전달
- 메모리 내부에서 block을 정해놓고 그 내부에 전달해야하는 파라미터를 전달
- Stack을 이용
Block 또는 Stack 방식은 파라미터의 길이나 수에 제한이 없다.
위 예시를 통해 알아보자
- X번지에 전달해줘야 하는 파라미터가 존재
- load address X : 메모리에 파라미터를 갖고 있는 시작 주소(X번지) 특정 레지스터를 이용하여 전달
- System call 13 : 13번 system call 호출 (중간 아래 빨간 박스 내부 그림에 해당)
- 오른쪽 박스 그림처럼 X라는 주소값과 함께 전달
▶ Types of System Calls
- Process Control
- File Management
- Device Management
- Information maintenance
- Communications
크게 5가지 유형의 System Call이 존재
'CS > OS' 카테고리의 다른 글
[OS] Process (2) : 프로세스 (0) | 2023.04.04 |
---|---|
[OS] Process (1) : 프로세스 (0) | 2023.03.28 |
[OS] - OS Structure(2) : System Program, Virtual Machine (0) | 2023.03.21 |
[OS] - OS 소개(2) : OS 구조 및 기능 (0) | 2023.03.12 |
[OS] - OS 소개(1) : 컴퓨터 구성, I/O Structure (0) | 2023.03.09 |