티스토리 뷰
운영체제의 작동
부트스트랩 = 컴퓨터 시작 후 제일 처음 실행되는 프로그램
1. ROM(Read Only Memory)에 펌웨어로 저장되었는 부트스트랩 실행
2. CPU 레지스터에서 장치 컨트롤러, 메모리 내용 등 시스템의 모든 측면 초기화
3. 부트스트랩 프로그램이 운영체제 커널을 찾아 메모리에 적재
4. 커널이 적재되어 실행되면 시스템과 사용자에게 서비스 제공
시스템 데몬 = 커널이 실행되는 전체 기간 동안 실행되는 시스템
: 시스템 프로그램에 의해 커널 외부에서 제공
*시스템 프로그램
: 부팅할 때 메모리에 적재
: Linux에서 첫 번째 시스템 프로그램 - systemd (많은 데몬을 시작)
이 단계가 완료되면 시스템은 이벤트가 발생할 때까지 기다린다.
트랩 = 사용자 프로그램 특정 요청 때문에 발생하는 소프트웨어 생성 인터럽트
: 시스템 콜 실행 및 운영체제가 제공하는 서비스가 수행될 것을 요구
ex) 0으로 나누거나 유효하지 않은 메모리 액세스
다중 프로그래밍(Multi Programming)과 다중 태스킹(Multi Tasking)
운영체제는 항상 CPU나 I/O장치를 바쁘게 유지해야한다. 따라서 운영체제는 CPU가 항상 한 개를 실행할 수 있도록 프로그램을 구성하여 CPU 이용률을 높이고 사용자 만족도를 높인다.
다중 프로그래밍은 프로세서의 자원 낭비를 막기 위함이 목적이고 다중 태스킹은 정해진 시간동안 각각의 task를 번갈아 수행하는 것이 목적이다.
다중 프로그래밍과 다중 태스킹 시스템은 파일 시스템 제공, 저장장치의 관리, 부적절한 사용자로부터 자원을 보호, 프로세스 동기화 및 통신을 위한 기법 제공 그리고 교착상태(프로세스가 서로를 영원히 기다리는 상태)를 방지하는 등 여러가지를 제공해야한다.
*프로세스 : 다중 프로그램 시스템에서 실행 중인 프로그램
다중 프로그래밍
다중 프로그래밍의 경우 유휴 상태가 없다. 다중 프로그래밍 되지 않은 시스템에서는 CPU가 유휴(CPU가 작동하지 않고 쉬는 상태)일 수있다. 하지만 다중 프로그램 시스템에서 운영체제는 한 프로세스가 대기 상태일 경우, 단순히 다른 프로세스로 전환하여 실행한다. 이후, 유휴였던 프로세스는 대기를 마치고 CPU를 다시 돌려받는다.
다중 태스킹
다중 태스킹의 경우 다중 프로그래밍의 논리적 확장이다. 다중 태스킹은 잦은 프로세스 전환을 통해 사용자에게 빠른 응답 시간을 제공한다. 예를 들어서, 대화식 입력(키보드 I/O)가 진행되는 동안 CPU를 쉬게 하지 않고, 운영체제는 CPU는 다른 사용자의 프로그램으로 신속하게 전환한다.
-> CPU 스케쥴링이 다중 태스킹에서의 전환이 어떻게 이루어지는지 결정한다.
다중 태스킹 시스템에서 적절한 응답 시간을 보장해야한다. 일반적으로 가상 메모리(Virtual Memory)를 사용한다. 이는 일부만 메모리에 적재된 프로세스의 실행을 허용하는 기법이다. 가상 메모리의 장점은 프로그램이 물리 메모리의 크기보다 더 커도 된다는 것이다. 가상 메모리는 메모리를 크고 균등한 저장장치의 배열로 추상화하여, 사용자에게 보이는 논리 메모리를 물리 메모리로부터 분리시킨다.
이중 모드와 다중 모드 운용
악의적인 프로그램으로 인해 다른 프로그램이나 운영체제가 잘못 실행되지 않도록 보장해야한다. 따라서 시스템은 운영체제 코드 실행과 사용자-정의 코드 실행을 구분한다. 컴퓨터 시스템은 다양한 실행 모드를 차별화할 수 있도록 하드웨어 자원을 제공한다.
컴퓨터의 대표적인 실행 모드 2가지
1. 사용자 모드
2. 커널 모드 (=수퍼바이저 모드, 시스템 모드)
컴퓨터 시스템이 사용자 응용을 위해서 실행될 때 시스템은 사용자 모드에 있다. 그러나, 사용자 응용이 운영체제로부터 서비스를 요청할 경우(시스템 콜), 커널모드로 전환한다.
모드 비트
하나의 비트를 이용해서 현재의 모드를 나타내기 위해 컴퓨터의 하드웨어에 추가되었다. 모드 비트의 사용으로, 운영체제를 위해서 실행되는 작업과 사용자를 위해서 실행되는 작업을 구분할 수 있다.
⚫ 커널 모드 = 0
⚫ 사용자 모드 = 1
과정
1. 시스템 부트 시, 하드웨어는 커널 모드에서 시작
2. 운영체제 적재 시, 하드웨어는 사용자 모드에서 사용자 프로세스 시작
3. 트랩, 인터럽트 발생할 경우, 하드웨어는 사용자 모드에서 커널 모드로 전환 (모드 비트를 0으로 변경)
-> 운영체제가 컴퓨터의 제어를 얻을 때 : 항상 커널 모드 (모드 비트 0)
-> 제어를 넘기기 전 : 항상 사용자 모드 (모드 비트 1)
특권명령
우리는 악영향을 끼칠 수 있는 일부 명령을 특권 명령(privileged instruction)으로 지정한다. 이는 잘못된 사용자로부터 운영체제를 보호하기 위함이다. 하드웨어는 특권 명령이 커널모드에서만 수행되도록 허용함으로써 보호한다. 사용자 모드에서 특권 명령을 수행하려고 시도할 경우, 하드웨어는 이는 실행하지 않고 불법적인 명령으로 간주해 운영체제로 트랩을 건다.
ex) 커널 모드로 전환하는 명령어, I/O 제어, 타이머 관리, 인터럽트 관리
다양한 모드
Intel
: 4개의 분리된 보호 링
: 링 0 = 커널 모드
: 링 3 = 사용자 모드
ARMv8
: 7가지 모드
가상화를 지원하는 CPU
: VMM(Virtual Machine Manager)이 시스템을 제어하는 시점을 표시하기 위한 별도의 모드 존재
-> VMM은 사용자 프로세스보다 많은 권한을 가지지만 커널 보다는 적은 권한을 가진다.
시스템 콜
: 사용자 프로그램이 자신을 대신하여 운영체제가 수행하도록 지정되어있는 작업을 운영체제에 요청할 수 있는 방법을 제공
: 운영체제가 수행해야할 동작을 사용자 프로세스가 요청하는 것
* 컴퓨터 시스템의 처리기가 지원하는 기능에 따라 다양한 방법으로 호출
* 일반적으로 인터럽트 벡터의 특정 위치로 트랩을 거는 형태
* 보통 trap 명령어로 수행되지만, 몇몇은 syscall 이라는 특정 명령어를 통해 수행
시스템 콜이 수행될 때, 하드웨어에 의해 시스템 콜을 하나의 소프트웨어 인터럽트로 취급한다.
시스템 콜 수행 과정
1. 제어가 인터럽트 벡터를 통해 운영체제 내의 서비스 루틴으로 전달
2. 모드 비트가 커널 모드로 설정
3. 커널은 인터럽트를 발생시킨 명령을 검사하여 어떤 시스템 콜이 발생했는지 확인
: 전달된 인수가 사용자 프로그램이 요청하는 서비스 유형을 표시
4. 커널은 인수가 정확하고 합법적인지 검증 후 요청 실행
5. 제어를 시스템 콜 다음의 명령으로 복귀
사용자가 불법 명령을 수행하거나 사용자 주소 공간이 아닌 메모리에 접근할 경우
1. 하드웨어는 운영체제로 트랩을 발생시킨다.
2. 트랩은 인터럽트처럼 인터럽트 벡터를 통해 제어를 운영체제에 넘긴다.
3. 운영체제는 프로그램을 비정상적으로 종료시킨다.
4. 적절한 오류 메세지가 주어지고, 프로그램의 메모리가 덤프된다.
*메모리 덤프 : 사용자나 프로그래머가 이를 조사하고, 프로그램을 수정하여 다시 실행시킬 수있도록 통상 파일에 기록된다.
타이머
타이머는 제어가 운영체제로 복귀하지 않는 경우가 없도록 방지한다. 이를 위해서 타이머는 지정된 시간 후 컴퓨터를 인터럽트 하도록 설정한다. 사용자가 제어를 양도하기 전에, 운영체제는 타이머가 인터럽트를 할 수 있도록 설정되었는지 확인한다. 타이머 값을 변경하는 명령은 특권 명령이다.
⚫ 고정 타이머
⚫ 가변 타이머 : 고정률의 클록(fixed-rate clock)과 계수기로 구현
* 계수기
: 운영체제가 설정
: 클록이 똑딱(tick)할 때 계수기가 감소
: 계수기가 0이 될 경우 인터럽트 발생
'👩🏻💻개발공부 > 운영체제' 카테고리의 다른 글
[🦖운영체제 1.7, 1.8] 가상화, 분산 시스템 (0) | 2024.04.15 |
---|---|
[🦖운영체제 1.5] 자원관리 - 프로세스 관리, 메모리 관리, 파일 시스템 관리, 대용량 저장장치 관리, 캐시 관리, 입출력 시스템 관리 (3) | 2024.04.14 |
[🦖운영체제 1.3] 컴퓨터 시스템 구조 - 단일, 다중 처리기 시스템, 클러스터형 시스템 (3) | 2024.04.06 |
[🦖운영체제 1.2] 컴퓨터 시스템의 구성 - 인터럽트, 저장장치, 입출력 구조 (0) | 2024.04.02 |
[🦖운영체제 1.1] 운영체제가 할 일 (0) | 2024.03.28 |
- Total
- Today
- Yesterday
- 스페인
- nodejs
- 백엔드 개발
- googleapis
- 혼공
- 자바스크립트
- C++
- MySQL
- 해커톤
- 스페인 교환학생
- JS
- Linux
- 교환학생
- Process
- JavaScript
- 깃 예제
- 백준
- Signal
- 혼공단 SQL
- AWS
- 개발
- 개발일지
- 혼공단 9기
- 운영체제
- 혼공학습단
- 리눅스
- 프로젝트
- SQL
- 공룡책
- 혼공단
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |