운영체제는 사용자를 위한 프로그램이 아닌 사용자가 실행하는 프로그램을 위한 프로그램이다.
사용자가 만들고 실행하는 운영프로그램은 운영체제의 도움을 받아서 실행된다.
운영체제는 현존하는 프로그램 중 가장 규모가 큰 프로그램 중 하나이다.
운영체제가 제공하는 기능은 다양하다. 운영체제가 다양한 종류가 있어도 운영체제가 프로그램에게 제공해주는 가장 핵심적인 서비스는 존재한다. 예를들어 아이폰과 안드로이드가 제공해주는 각 운영체제는 다르지만 가장 핵심적인 기능은 전화기능, 문자기능, 인터넷연결 기능
운영체제 또한 다양하고 방대한 분량이지만, 가장 핵심적인 서비스는 컴퓨터 자원에 접근하고 조작하는 기능과 프로그램이 올바르고 안전하게 실행괴게 하는 기능이다.
커널
운영체제가 설치된 모든 기기에는 커널이 있다. 실행하고 개발하는 프로그램이 하드웨어를 이용하는 양상이 달라지고 결과적으로 컴퓨터 전체의 성능도 달라질 수 있다.
운영체제의 심장인 커널에 속하지 않는 기능이지만 운영체제에는 속하는 기능?
사용자 인터페이스 (UI): 터치, 마우스 조작, CLI
UI는 운영체제가 제공하는 서비스 이지만 컴퓨터와 사용자가 상호작용하기 위한 통로일 뿐 운영체제가 존재하는 목적(핵심기능)이 아니기 때문에 커널에 속하지는 않는다.
이중모드와 시스템 호출
사용자가 실행하는 프로그램은 자원(메모리, SSD, 하드디스크 등등) 에 직접 접근할 수 있을까?
정답은 NO! 일반적인 프로그램은 사용자가 직접 접근할 수 없다. 사용자가 자원에 직접 접근이 가능하다고 했을 때 CPU안에서 충돌이 발생할 수 있다.
예를들어 한 응용프로그램이 SSD를 사용하는데 다른 프로그램을 실행하는 중 SSD를 사용하게 되면 기존에 사용하던 응용 프로그램의 SSD를 모르고 삭제하는 등의 위험 현상이 발생할 수 있다.
그렇기에 운영체제는 일반적인 운영프로그램이 자원에 접근하려고 할 때 오직 자신을 통해서만 접근하도록 통솔한다.
자원의 접근에 대행하는 일종의 문지기인 셈이다.
ex) 응용프로그램이 하드디스크 자원에 접근하고 싶을 때 직접적인 접근이 아닌 운영체제의 하드디스크 저장 코드를 거쳐서 하드웨어에 접근하게 된다.
[이중 모드]
CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식이다. 이처럼 운영체제의 자원 접근 대행은 이중모드로써 구현이 된다.
사용자 모드
- 운영체제 서비스를 제공받을 수 없는 실행으로 프로그램의 자원에 함부로 침범하지 못하는 모드 (코드를 작성하거나 프로세스를 실행하는 등의 행동)
- 커널 영역의 코드를 실행할 수 없는 실행 모드
- 자원 접근 불가
커널 모드
- 운영체제의 서비스를 제공받을 수 있는 실행 모드
- 자원 접근을 비롯한 모든 명령어 실행 가능 모드
플래그 레지스터 중 '슈퍼바이저 플래그' 는 커널모드로 실행중인지 사용자모드를 실행중인지를 나타낸다. 슈퍼바이저 플래그가 1인 경우 커널모드, 0인경우는 사용자모드로 실행 중임을 나타낸다.
이처럼 프로세스가 실행되는 동안 CPU는 명령어를 실행하는 모드를 유저모드와 커널모드를 왔다갔다 할 수 있도록 구분하는 방식이다. 그렇다면 언제 커널 모드로 바뀌고 사용자 모드로 바뀔까?
[시스템 호출 (System call) ]
시스템 호출은 운영체제 서비스를 제공받기 위해 커널 모드로 전환하는 방법이다.
시스템 호출 명령어 발생 > CPU는 해당 작업을 백업 > 인터럽트 발생 > 시스템 호출 수행 코드 > 실행하던 응용 프로그램을로 복귀
운영체제마다 시스템 호출에 대한 정의가 정해져 있다.
- 커널 모드로 전환하여 실행하기 위한 호출
- 일종의 소프트웨어 인터럽트
- 시스템 호출이 처리되는 방식은 하드웨어 인터럽트 처리 방식과 유사하다. (특정 명령어 실행을 위해 인터럽트를 걸어준다.)
운영체제의 핵심 서비스
어떤 도움을 운영체제로 부터 도움을 받으며 실행이 되는 것?
[프로세스 관리]
- 프로세스 == 실행 중인 프로그램
- 수많은 프로세스들이 동시에 실행
현재 메모리에 적재되서 동시에 실행되고 있는 여러 프로세스를 관리해 준다.
더해서 프로세스들이 동시에 실행되고 있는데 모든 프로세스는 메모리에 올라가는게 맞지만 운영체제의 어떠한 기법에 대해 메모리에 굳이 적재되지 않을 수 도 있다 (페이징, 스와핑)
동시에 실행된다는 말은 내부적으로 보자면 사용자가 눈치채기 못하게 번갈아가며 실행되는 것이다.
프로세스가 실행이 될 때도 문제없이 실행될 수 있게끔 관리해줘야 하며 다 끝난 프로세스는 올바르게 종료를 시켜야 한다.
또한 프로세스는 다양할 뿐만 아니라 프로세스는 상황도 다 다르다.
이 처럼 운영체제는 동시다발적으로 삭제, 실행, 생성되는 각기 다른 프로세스들을 일목요연하게 관리할 수 있어야 한다.
프로세스와 스레드, 프레세스 동기화, 교착상태 해결
[자원 접근 및 할당]
프로세스는 실행을 위해 자원을 필요로 한다. 운영체제는 어떻게 자원을 관리하고 어떤 기능을 프로세스에 제공하는 걸까?
CPU 스케줄링:
어떤 프로세스를 먼저, 얼마나 오래 실행할지?
메모리: (페이징, 스와핑)
새로운 프로세스를 적재할 때 어떻게 비어있는 공간을 찾는 지?
메모리에 전부 다 적재하는게 효율적인지?
메모리에 적재하지 않고도 문제없이 실행할 수 있는지?
실행하고자 하는 프로세스가 메모리보다 큰 경우에 어떻게 실행이 가능한지?
입출력장치:
하드웨어 인터럽트 서비스 루틴 *운영체제가 제공해주는 기능 (커널영역에 적재된 코드)*
응용프로그램이 입출력 장치에 접근하고자 할때, 할당받아서 실행하고자 할 때 운영체제는 인터럽트 서비스 루틴을 제공하여 각각의 응용프로그램에 접근할 수 있도록 한다.
파일 시스템 관리: 파일과 폴더
- 관련된 정보 파일이라는 단위로 저장 장치에 보관 (보조기억장치에 있는 덩어리를 '파일'이라는 이름으로)
- '파일'이라는 단위를 묶어 디렉토리(폴더) 단위로 저장 장치에 보관
'CS > 컴퓨터구조와운영체제' 카테고리의 다른 글
컴퓨터구조 + 운영체제_프로세스_02 (0) | 2023.08.19 |
---|---|
컴퓨터구조 + 운영체제_프로세스_01 (0) | 2023.08.12 |
다양한 입출력 방법 (0) | 2023.07.01 |
장치 컨트롤러와 장치 드라이버 (0) | 2023.07.01 |
RAM의 특성과 종류 (0) | 2023.06.06 |
댓글