운영체제
운영체제는 앞단에 어떤 인터페이스를 두느냐에 따라 GUI와 CUI로 나눌 수 있다.
GUI(Graphical User Interface)
그래픽을 사용하여 컴퓨터와 상호작용하는 인터페이스이다.
windowOS, macOS 등 현대의 OS가 이를 대표한다.
CUI(Character User Interface)
사용자가 키보드만을 이용하여 문자를 기반으로 컴퓨터와 상호작용하는 인터페이스이다.
MS-DOS가 대표적이다. 1994년 단종되었다.
운영체제의 역할
- CPU 스케줄링과 프로세스 상태 관리
- 메모리 관리
- 디스크 파일 관리
- I/O 디바이스 관리
운영체제의 구조
- 유저프로그램
- 인터페이스
- GUI, CUI
- 시스템콜
- 커널
- I/O디바이스, 키보드 드라이버 등등
- 하드웨어
기울인 부분이 OS 부분이다.
컴퓨터 시스템 구조
- CPU : 인터럽트에 의해 메모리에 존재하는 명령어를 해석해 실행하는 일꾼
- DMA컨트롤러 : CPU의 일을 보조하는 일꾼
- 메모리(RAM) : 전자회로에서 데이터, 상태 등을 기록하는 장치
- 타이머 : 특정 프로그램에 시간을 다는 역할
- 무한 루프에 빠지는 것들을 방지해준다.
- 디바이스 컨트롤러 : IO 디바이스들의 작은 CPU
- 하드, 키보드 등등 관리
- 로컬버퍼 : 디바이스에 달려있는 작은 메모리
CPU는 메모리에 있는 프로세스들을 가져다 해석해 실행하는 것이다.
CPU
산술논리연산장치, 제어장치, 레지스터로 구성되어있는 장치. 인터럽트에 의해 메모리에 존재하는 명령어를 해석해 실행하는 일종의 일꾼이다.
산술논리연산장치(arithmetic and logical unit, ALU)
덧셈, 뺄셈, 곱셈, 나눗셈 등 산술연산과 논리연산을 하는 회로장치를 말한다.
제어장치(control unit, CU)
프로세스의 조작을 지시하며 명령어들을 읽고 해석하며 데이터 처리를 위한 순서를 결정한다.
레지스터
CPU내의 매우 빠른 임시 기억장치
ex) 어떠한 계산작업을 한다.
- 제어장치가 메모리에 있는 일을 레지스터에 올린다.
- 제어장치가 레지스터에 있는 값을 읽으라고 ALU에게 시킨다.
- ALU는 레지스터에 있는 값을 읽어 계산한다.
- 제어장치가 레지스터에 있는 결과를 메모리에 옮기도록 한다.
- 추가로 메모리에 있는 결과를 HDD에 저장하면 영구저장 되는 것이다.
CPU도 메모리에서 작업을 읽어 실행하는 역할이라고 했는데 사실은 메모리가 레지스터에 전달한 작업을 읽어 실행하는 것이다.
인터럽트(interrput)
운영체제는 인터럽트에 의해 구동된다고 하기도 한다.
어떤 신호가 들어왔을 때 CPU를 잠깐 정지시키는 것을 말하며, 0으로 숫자를 나누는 산술연산오류, 프로세스 오류 등으로 발생한다.
또한 오류뿐만 아니라 키보드, 마우스 등 IO 디바이스를 사용할 때도 발생하고 우선순위가 높은 프로세스의 발생 등으로도 발생된다.
인터럽트 과정
CPU는 메모리에 있는 명령어(instruction)을 순차적으로 실행하는데 인터럽트가 발생되면 점프해서 인터럽트 핸들러 함수가 모여있는 인터럽트 벡터로 간다.
여기서 인터럽트핸들러함수(인터럽트 서비스 루틴, ISR)가 실행되며 특정 명령어를 실행하게 되고 이 후 인터럽트가 종료되면 다시 순차적으로 실행된다.
인터럽트 핸들러 함수
~~한 인터럽트가 발생했을 때 ~ 하면 된다.가 정의되어 있다.
인터럽트의 종류
- 하드웨어 인터럽트
- IO 디바이스 등 하드웨어에서 발생하는 인터럽트이다.
- 예를 들어 마우스를 기반으로 버튼을 클릭할 때 혹은 디스크에서 파일읽기, 쓰기 작업이 완료되었을 때 발동된다.
- 소프트웨어 인터럽트
- 트랩이라고도 한다.
- 프로세스의 오류, 종료, 시작 등을 기반으로 프로세스에서 발생하는 인터럽트이다.
- 하드웨어 인터럽트보다 우선순위가 높다.
시스템콜
운영체제가 커널에 접근하기 위한 인터페이스이며 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 이를 거쳐 호출하도록 설계되어있다.
프로세스 관리(생성, 삭제 등), 파일관리, 디바이스 관리, 시간 및 날짜 관련 시스템, 프로세스 간 통신 때 이를 통해 커널함수를 호출한다.
예를 들어 프로세스를 종료하는 kill() 함수를 실행해도 시스템콜을 거쳐 커널함수가 호출되게 된다.
시스템콜의 과정
유저 프로그램이 I/O 요청을 위한 트랩을 발동했다고 가정한다.
- 유저 프로그램이 I/O 요청 트랩을 발동한다.
- 올바른 I/O 요청인지 확인한다.
- 유저 모드가 시스템콜을 통해 커널모드로 변환된다.
- 이 후 커널함수를 실행한다.
커널
운영체제의 핵심 부분이자 시스템콜을 제공하며 보안, 메모리, 프로세스, 파일 시스템, I/O 디바이스, I/O 요청 관리 등 운영체제의 중추적인 역할을 한다.
유저 모드
유저가 접근할 수 있는 영역을 제한저긍로 두며 컴퓨터 자원에 함부로 침범하지 못하도록 하는 모드이다.
커널 모드
모든 컴퓨터 자원에 접근할 수 있는 모드이다.
modebit
시스템콜이 작동될 때 modebit을 기반으로 유저모드와 커널모드를 구분한다. 1 또는 0의 값을 갖는 플래그 변수이며 1은 유저모드, 0은 커널모드이다.
시스템콜의 장점
유저 프로그램은 시스템콜 기반으로 커널과 분리가 된다.
즉, 유저프로그램은 복잡한 파일 시스템과 프로세스 생성 등에 대한 내부동작을 신경쓸 필요가 없게된다.
또한 운영체제의 관리하에 프로그램이 운영되므로 시스템의 안정성과 보안이 강화된다.
ex) 공격자가 만든 카메라 앱 프로그램이 아무런 제약 없이 커널에 접근할 수 있다고 가정하면 카메라에 관련한 메모리 등이 오염될 수 있고 카메라는 내 의도와 상관없이 켜져 사생활이 노출될 수 있다.
이러한 것을 방지하기 위해 시스템콜로만 커널모드에 진입할 수 있도록 하나의 통로를 만들어둔 것이다.