1. 컴퓨터 시스템의 네 가지 구성요소
- 사용자 (User)
- 응용프로그램 (system and application system)
- 운영체제 (Operating System)
- 워드 프로세서, 스프레드 시트, 컴파일러, 웹 브라우저 등
- 사용자의 계산 문제를 해결하기 위해 이들 자원이 어떻게 사용될지를 정의
- 하드웨어 (Hardware)
- 중앙 처리 장치, 메모리 및 입출력 장치로 구성
- 기본 계산용 자원 제공
❶ 사용자가 쉽게 사용할 수 있도록
❷ 하드웨어가 효율적으로 사용할 수 있도록
운영체제가 중재하는 역할.
컴퓨터가 무엇이냐에 따라 ❶ 또는 ❷가 강조 된다.
운영체제는 개인의 사용 편이성과 자원이용 간에 적절한 조화를 이루도록 설계된다.
컴퓨터 시스템 구성
- CPU
- Central Processing Unit
- 산술논리연산장치, 제어장치, 레지스터(임시기억장치)로 구성
- 인터럽트에 의해 단순히 메모리에 존재하는 명령어를 해석해서 실행
- Memory
- 전자회로에서 데이터나 상태, 명령어 등을 기록하는 장치
- RAM(Random Access Memory)을 일컬어 메모리라고도 한다.
- Device Controller
- 컴퓨터와 연결되어 있는 IO 디바이스들의 작은 CPU
- 각 디바이스에서 데이터를 임시로 저장할 수 있는 작은 메모리인 로컬 버퍼를 갖고 있다.
컴퓨터 시스템은 하나 이상의 CPU와 다수의 장치 제어들로 구성, 공용버스로 연결된다.
❶ 키보드의 키 push
→ keyboard controller에 있는 buffer에 아스키 코드로 바꿔서 저장한다.
❷ 키보드 컨트롤러가 CPUI에 인터럽트를 보낸다.
❸ CPU는 하던 일을 멈추고 인터럽트를 처리한다.(버퍼에서 메모리로 카피
2. 운영체제
- 컴퓨터의 하드웨어를 관리하는 프로그램.
- 컴퓨터의 사용자(user)와 컴퓨터 하드웨어 사이의 중재자 역할.
- Resource allocator - 효율적이고 공정한 자원 사용에 대한 요청을 결정하여 자원을 골고루 나누어주는 역할.
- Control Program - 에러들을 막고 부적절한 사용을 막기 위해 프로그램 실행을 컨트롤한다.
- Kernel - 컴퓨터에서 항상 실행되는 하나의 프로그램.
운영체제의 목적
- user program을 실행하고, user가 문제를 쉽게 해결할 수 있도록 편의 기능을 제공.
- 효율적으로 컴퓨터 하드웨어를 사용할 수 있다.
운영체제의 역할
- CPU 스케줄링과 프로세스 관리 : CPU 소유권을 어떤 프로세스에 할당할지, 프로세스의 생성과 삭제, 자원 할당 및 반환을 관리합니다.
- 메모리 관리 : 한정된 메모리를 어떤 프로세스에 얼만큼 할당해야 하는지 관리해야 한다.
- 디스크 파일 관리 : 디스크 파일을 어떠한 방법으로 보관할지 관리한다.
- I/O 디바이스 관리 : 입출력 디바이스(마우스, 키보드 등) 컴퓨터 간 데이터를 주고받는 것을 관리한다.
운영체제의 서비스
- 실행환경을 제공한다.
- 프로그램과 그 프로그램 사용자에게 특정 서비스를 제공한다.
- user에게 유용한 기능들을 제공한다.
- 사용자 인터페이스 (user interface)
- 거의 모든 운영체제는 user interface를 갖고 있다.
- 프로그램 실행 (program execution)
- 시스템은 프로그램을 메모리에 적재해 실행할 수 있어야 한다.
- 정상적이든 비정상적이든 실행을 끝낼 수 있어야 한다.
- I/O 연산 (operation)
- 파일 혹은 입출력 장치가 연관되어 있는 입출력은 실행 중인 프로그램이 요구할 수 있다.
- 파일 시스템 조작 (File System multiplation)
- 프로그램은 파일과 디렉토리를 읽고 쓸 필요가 있고,
- 삭제와 생성, 검색을 할 수 있어야 하고
- 파일의 정보를 연결할 수 있어야 한다.
- 통신 (Communication)
- 프로세스 간 통신
- 오류 탐지 (Error detection)
- 자원 할당 (Resource allocation)
- 회계 (Accounting) : cost를 부과하기 위한 서비스
- Protection & Security
운영체제의 구조
- 사용자 운영체제 인터페이스
- CLI (Command Line Interpreter)
- 커널에 명령어 해석기를 포함하고나, 시스템 프로그램에 의해 명령어를 구성한다.
- 그래픽이 아닌 명령어로 처리하는 인터페이스
- prompt를 찍어주고 입력된 명령을 운영체제에 전달한다.
- GUI (Graphical User Inteterface)
- user friendly desktop metaphor interface
- 사용자가 전자장치와 상호 작용을 할 수 있도록 하는 사용자 인터페이스
- 단순 명령어 창이 아닌 아이콘을 마우스로 클릭하는 단순한 동작으로 컴퓨터와 상호 작용을 할 수 있도록 해준다.
- CLI (Command Line Interpreter)
- 시스템 호출 (System call)
- 운영체제는 사용자가 자원의 관리나 할당에 신경을 쓰지 않고 처리할 수 있는 것들을 제공해서 편리하게 사용자들이 쓸 수 있게 해준다. → C언어에서 malloc으로 직접 메모리 할당, 메모리 할당은 운영체제의 영역이 아닌가?
- 운영체제는 크게 2가지 모드로 프로세스를 동작시킨다.
- 사용자 모드 (User Mode)
- 사용하는 대부분의 프로그램이 동작하는 모드
- 유저가 접근할 수 있는 영역을 제한적으로 두며 컴퓨터 자원에 함부로 침범하지 못하는 모드
- 커널 모드 (Kernel mode)
- 운영체제 내부의 커널이 관리하는 프로세스 모드
- 모든 컴퓨터 자원에 접근할 수 있는 모드
사용자 모드가 커널 영역에 직접 접근하는 것이 아니라 운영체제에게 요청을 하면 해당 처리를 운영체제에 위임을 해서 처리
- malloc
-
더보기중요한 점은 단순하게 메모리 용량 할당 뿐만 아니라 I/O 작업이나 네트워크 작업 등 커널 영역이 필요한 모든 곳에서는 시스템 콜이 필요하다. 우리가 사용하는 프로세스는 수 없이 많이 사용자모드와 커널모드를 왔다갔다하면서 작업을 수행하는 것이다.
따라서, 우리가 C를 사용하면서 malloc 과 같은 명령어를 수행하면 내부적으로 시스템 콜이 발생해서 운영체제에게 이 요청을 위임한다. 운영체제는 해당 명령어를 해석하고 할당해서 완료가 되면 해당 프로세스에게 알려주고 다시 프로세스는 사용자 모드로 동작한다.
-
- 운영체제가 커널에 접근하기 위한 인터페이스
- 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 사용
- 운영체제에 의해 사용 가능하게 된 서비스에 대한 인터페이스를 제공한다.
- Why use APIs rather than System calls?
- 프로그램의 호환성
- 실제 시스템 호출은 종종 좀 더 자세한 명세가 필요하므로 프로그램 상에서 작업하기가 어렵다.
유저 프로그램이 I/O 요청으로 트랩을 발동하면 올바른 입출력 요청인지 확인한 후, 유저모드가 시스템 콜을 통해 커널 모드로 변환되어 실행된다.
유저 모드에서 파일을 읽지 않고 커널 모드로 들어가 파일을 읽고 다시 유저 모드로 돌아가 그 뒤에 있는 유저 프로그램의 로직을 수행.
- 프로세스나 스레드에서 운영체제로 어떠한 요청을 할 때 시스템 콜이라는 인터페이스와 커널을 거쳐 운영체제에 전달
- 시스템 콜은 하나의 추상 계층
- 네트워크 통신이나 데이터베이스와 같은 낮은 단계의 영역 처리에 대한 부분을 많이 신경 쓰지 않고 프로그램을 구현할 수 있다는 장점.
- 시스템 호출의 유형
- 프로세스 제어 (Process Control)
- 끝내기(exit), 중지 (abort)
- 적재(load), 실행(execute)
- 프로세스 생성(create process) - fork
- 프로세스 속성 획득과 속성 설정
- 시간 대기 (wait time)
- 사건 대기 (wait event)
- 사건을 알림 (signal event)
- 메모리 할당 및 해제
- 파일 조작 (File Manipulation)
- 파일 생성 / 삭제 (create, delete)
- 열기 / 닫기 / 읽기 / 쓰기 (open, close, read, wirte)
- 위치 변경 (reposition)
- 파일 속성 획득 및 설정 (get file attribute, set file attribute)
- 장치 관리 (Device Manipulation)
- 하드웨어의 제어와 상태 정보를 얻음 (ioctl)
- 장치를 요구(request device), 장치를 방출 (relese device)
- 읽기 (read), 쓰기(write), 위치 변경
- 장치 속성 획득 및 설정
- 장치의 논리적 부착 및 분리
- 정보 유지 (Information Maintenance)
- getpid(), alarm(), sleep()
- 시간과 날짜의 설정과 획득 (time)
- 시스템 데이터의 설정과 획득 (date)
- 프로세스 파일, 장치 속성의 획득 및 설정
- 통신 (Communication)
- pipe(), shm_open(), mmap()
- 통신 연결의 생성, 제거
- 메시지의 송신, 수신
- 상태 정보 전달
- 원격 장치의 부착 및 분리
- 보호 (Protection) - 커널 모드를 통해서 외부의 접근을 최소화해야하는 영역을 지정해두고 보안성을 높임.
- chmod()
- umask()
- chown()
- 프로세스 제어 (Process Control)
[참고서적]
면접을 위한 CS 전공지식 노트
Operating System Concepts 에센셜 second edition
[참고블로그]
https://brewagebear.github.io/java-syscall-and-io/
'CS > 면접을 위한 CS 전공 지식 노트' 카테고리의 다른 글
면접 예상 질문 모음 (0) | 2023.11.09 |
---|---|
[CS] 프로세스와 스레드(1) (0) | 2023.07.27 |
[CS] 디자인 패턴이란? (0) | 2023.06.07 |