One_Blog

운영체제 - 시험 대비 정리 본문

운영체제

운영체제 - 시험 대비 정리

0xOne 2023. 4. 26. 17:13
728x90

시험 대비 정리라서 요약을 많이 했습니다.

 

하드웨어 = CPU + 주변 장치

하드웨어

- CPU,메모리, 주변 장치로 구성

- 시스템 버스로 연결되어 있음.

 

 

CPU

- 모든 장치의 동작을 제어하고 연산을 수행

CPU = 데이터부분(레지스터 + 연산 장치(ALU)) + 제어부분(제어장치)

제어 장치 -> (연산장치, 레지스터) : 제어 흐름

레지스터 <-->연산 장치 : 데이터 흐름

레지스터

레지스터의 종류 : 가시 / 불가시 레지스터

사용자 가시 레지스터 : 사용자가 운영체제와 프로그램을 이용해 정보 변경이 가능한 레지스터

- 데이터 레지스터(DR) : 함수 연산에 필요한 데이터 저장, 연산 결과로 플래그 값을 저장.

- 주소 레지스터(AR) : 주소나 유효 주소를 계산하는데 필요한 주소의 일부분을 저장

-- 기준 주소 레지스터 : 프로그램 실행 시 사용하는 기준 주소 값을 저장

-- 인덱스 레지스터 : 유효 주소를 계산하는데 사용하는 주소 정보 저장

-- 스택 포인터 레지스터 : 메모리에 프로세서 스택을 구현하는데에 사용, 주소 레지스터를 데이터 스택 포인터 / 큐포인터로 사용

사용자 불가시 레지스터 : CPU의 상태와 제어를 관리하며 사용자가 정보를 변경할 수 없는 레지스터

프로그램 카운터 (PC) : 다음 실행할 명령어의 주소를 보관

명령어 레지스터 (IR) : 현재 실행하는 명령어를 보관

누산기 (ACC) : 데이터를 일시적으로 보관하는 레지스터

메모리 주소 레지스터 (MAR) : 프로세서가 참조하려는 데이터의 주소를 명시하여 메모리에 접근하는 버퍼 레지스터

메모리 버퍼 레지스터 : (MBR/MDR) : 프로세서가 메모리에서 읽거나 메모리에 저장할 데이터 자체를 보관하는 버퍼 레지스터

 

메모리

메인 메모리

- CPU외부에 있으면서 수행할 프로그램과 데이터를 저장, CPU에서 처리한 결과를 저장

- DRAM을 자주 사용

- CPU와 보조기억 장치 사이에 발생하는 디스크 입출력 병목 현상을 해결

- CPU와 메인 메모리 사이 속도 차이는 캐시 메모리로 해결

캐시

- 처리 속도가 빠른 CPU와 메모리 사이의 속도 차이를 보완

- CPU가 다음에 참조할 정보가 얼마나 들어있는 지에 따라 성능이 좌우됨

캐시 히트 : 참조하려는 정보가 있을 때

캐시 미스 : 참조하려는 정보가 없을 때

지역성 : 참조하는 범위가 전체가 아닌 어느 한 공간에서 여러 번 참조

공간적 지역성 : 참조한 주소와 인접한 주소의 내용을 참조

시간적 지역성 : 한 번 참조한 주소를 재참조

 

커널

- 운영체제의 핵심 기능을 모아놓음 (프로세스,메모리,파일시스템,입출력, 프로세스 간 통신의 관리)

사용자 : GUI, CLI를 통해 접근

프로그램 : Syscall을 통해 접근

하드웨어 : 드라이버 설치로 접근

커널의 구조

- 단일 구조 커널 : 프로그램이 Syscall을 통해 커널에 접근

- 계층 구조 커널 : 프로그램 <-> 입출력 관리 <-> 메시지 해석기 <-> 메모리 관리 <-> 프로세서 할당 및 스케줄링

  하드웨어 단 처리를 계층별로 구분

- 마이크로 커널 : 커널의 기본적 기능을 제외한 기능을 사용자 영역에 구현. 커널의 크기를 줄인 구조, IPC를 통해 통신

 

부팅

RAM : 휘발성

ROM : 비휘발성

전원 ON -> BIOS 실행 -> (ROM저장, 주변 장치 점검, powerOnSelfTest) -> BootLoader를 읽어 OS선택 -> 

디스크에 OS를 업로드 -> 실행 -> 부팅 완료

명령어와 데이터

데이터 : 입력장치로 컴퓨터에 유입되는 정보

명령어 : 실행할 동작을 명시하는 문장

프로그램 : 명령어의 모임

프로그램

- 명령어의 집합체

프로세스 : 실행 중인 프로그램

- 구조 - 코드 / 데이터 / 스택 / 힙

컴파일 과정

컴파일 : 작성된 코드를 실행 파일로 변환하는 과정

전처리기(code.i) -> 컴파일러(code.s) -> 어셈블러(code.o) -> 링커(code.exe) -> 실행

명령어 구조

연산 부호 (OPcode) : 프로세서가 실행할 동작 지정

피연산자 (Operand) : 연산할 데이터 정보의 위치 저장

직접 주소 : 피연산자에 데이터가 있는 레지스터 / 메모리 주소 지정

간접 주소 : 레지스터나 메모리 주소 정보 지정

모드비트 | 연산비트 | 피연산자

명령어 사이클

명령어 인출 -> 명령어 해석, PC++ -> 피연산자 인출 -> 명령어 실행 -> 결과 저장

인출 사이클

- 메모리에서 명령어를 읽어 명령어 레지스터에 저장

- PC++ , 다음 명령어를 읽도록 증가

1) PC -> MAR : PC에 저장된 주소를 MAR에 전달

2) MAR -> MBR : MAR에 저장된 주소에 해당하는 메모리 위치에서 명령어를 인출 후 MBR에 명령어를 저장

3) PC++ : PC증가

4) MBR -> IR : MBR에 저장된 내용을 IR에 전달

간접 사이클

- 간접 주소 지정 방법을 사용하면 실제 데이터가 저장된 주소인 유효 주소를 한번 더 읽는 과정 발생

1) IR -> MAR : IR에 저장된 명령어의 피연산자를 MAR에 전달

2) MAR -> MBR : MAR에 저장된 주소에 해당하는 메모리 위치에서 데이터를 인출 후 MBR에 저장

3) MBR -> IR : MBR에 저장된 내용을 IR에 전달

 

예제 풀이

AC = 0x532F

PC = 0x62A

0x62A : 0x961B

0x61B : 0x826

0x826 : 0x700E

기계어 형식 : I(1), opcode(3), address(12)

PC 가 0x62A -> 0x961B저장 되어 있음

0x 961B -> 1001 0110 0001 1011 (9 6 1 B)

1번째 비트 = 1이니까 간접 주소 참조

001 = SUB 연산

0110 0001 1011 = 0x61B

-> 0x826 저장되어 있음.

간접 주소니까 한번 더 참조.

0x 826 -> 0x700E 저장되어 있음.

AC : 0x532F였고, SUB에 0x700E니까 

5  3  2  F

7  0  0  E

---------

-2 3  2  1

-> E 3 2 1

AC = 0xE321

PC += 1, PC = 0x62B

IR = 0x961B

 

정답

1-1 : SUB연산

 

1-2 : 0xE321

 

1-3 : 
PC : 0x62B

AR : 0x826

IR : 0x961B

 

운영체제

- 사용자와 하드웨어 사이의 중간 매개체

 - 자원할당/관리, 프로그램 실행 제어, 입출력제어, 데이터 관리

운영체제 발전 목적

- 편리성

- 효율성(처리량 향상, 반환시간 단축, 신뢰도 향상, 사용가능도 향상)

- 제어 서비스 향상

역할

- 인터페이스 제공

- 자원 조정 및 관리

- 서비스 처리 및 제어

- 시스템 보호, 제어 

운영체제의 기능

자원 관리

- 메모리

- 프로세스

- 주변장치

- 파일

시스템 관리

- 시스템 보호

- 네트워킹

-명령 해석기

운영체제의 유형

- 일괄 처리 시스템

- 다중 프로그래밍 시스템

- 시분할 시스템

- 다중 처리 시스템

- 실시간 처리 시스템

- 범용 시스템

- 분산 처리 시스템

 

단일 프로그래밍 : 프로세스 1개

다중 프로그래밍 : 프로세스 n개

다중 프로세싱 : CPU가 여러 프로세스를 처리

 

다중 프로그래밍 시스템

- CPU가 유휴상태 일 때 실행중인 둘 이상의 작업이 CPU를 전환하며 사용하도록 동작하는 것

장점 : 많은 사용자 프로그램이 거의 동시에 할당 받는 느낌을 줌

단점 : 메모리 관리나 프로세스 정보 보관이 복잡함, 여러 작업이 준비를 갖출 때 다음 작업 선택 방법이 있어야함 (스케줄링)

시분할 시스템

- 다중 프로그래밍의 확장 버전

- 사용시간 / 규정 시간량 만큼 CPU를 할당 받음

장점 : 응답시간을 최소화하여 빠른 응답이 가능

단점 : 신뢰성, 보안, 무결성 등의 공유 자원 사용에 따른 문제점들이 나타남

다중 처리 시스템

- 단일 컴퓨터 시스템 내에서 둘 이상의 CPU를 사용하여 둘 이상의 프로세스를 동시에 지원하는 것

- CPU가 고장나도 다른 CPU를 이용하여 작업을 계속함

- CPU간의 연결, 상호작용, 역할 분담 등을 고려

실시간 처리 시스템

- 항상 온라인 상태

- 고정 시간 제약을 잘 정의하지 않으면 시스템 실패

경성 실시간 처리 시스템

- 작업의 중요도가 크고 시간 제약을 지키지 않으면 피해가 크다.

연성 실시간 처리 시스템

- 작업의 중요도가 낮고 시간 제약을 지키지 않아도 피해가 크지 않다.

운영체제의 서비스

- 부팅, 사용자, 시스템, System Call

사용자

- 사용자 인터페이스 제공

- 프로그램 실행

- 입출력 동작 실행

- 파일 시스템 조작

- 네트워크(통신)

- 오류탐지

시스템

- 자원할당

- 계정 관리

- 보호 및 보안

 

프로세스

- 실행 중인 프로그램

- CPU를 할당하여 실행할 수 있게끔 디스패치가 가능한 대상

프로세스 생성 시 RAM에 있는 내용

코드 영역 : 기계어로 코드 저장,RO

데이터 영역 : 전역 변수, Static변수,RW

힙 영역 : 동적할당

스택 : 지역변수, 리턴 값, 매개변수, 복귀 주소

 

Process Control Block

- 운영체제가 프로세스 제어 시 필요한 상태 정보를 저장

- 특정 프로세스 정보 저장하는 데이터 블록이나 레코드로 작업 제어 블록이라고도 부름

- 프로세스 생성 시 같이 생성되며 삭제도 같이 됨

구성요소

- 프로세스 식별자 : 각 프로세스의 고유 식별자

- 프로세스 상태 : 생성, 준비, 실행 등의 상태 표시

- 프로그램 카운터 : 다음 명령의 주소 표시

- 레지스터 저장 영역

- 등등

프로세스의 상태

준비 : CPU를 받기 위해 기다리는 상태 (->실행 : 디스패치)

실행 : CPU를 받아서 할 일을 하는 상태 (->준비 : 시간종료)

대기 : 이벤트 발생으로 CPU를 놓고 이벤트의 완료를 기다리는 상태

프로세스 문맥 교환

- 현재 CPU를 가진 프로세스의 PCB에 레지스터 내용을 저장

- 다음 CPU를 가질 프로세스의 PCB내용을 불러와서 레지스터에 덮어씀

- 실행 중인 프로세스에 인터럽트가 발생하면 생긴다.

-> 인터럽트 후 현재 실행 중인 프로세스를 재실행 할 수 있어서 문맥교환이 항상 일어나진 않는다.

프로세스의 구조

- 프로세스 실행 중 생성 시스템 호출을 이용하여 새로운 프로세스 생성 가능

- 프로세스 생성 순서로 부모 - 자식 관계 형성

트리형태(계층구조)

생성(fork) : 식별자 부여, 주소공간 할당, PCB공간 할당, 부모 프로세스, PCB 내용 복사, exec()로 자식을 덮어씀

- 복사된 프로세스 = 자식 프로세스

- 복사 원본 프로세스 = 부모 프로세스

- 복사 시 주소 공간 및 PCB 내용 전부 복사

 

종료(abort)

- 프로세스가 마지막 명령 실행 후 종료 / 삭제 요청

- 자식 프로세스가 종료되지 않으면 기다리고 자식 프로세스가 종료되는 상황은 다음과 같음

- 자식 프로세스가 할당된 자원을 초과하여 자원을 사용할 때

- 자식 프로세스에 할당한 작업이 더는 없을 때

비정상적인 종료

- 부모가 먼저 종료되거나 자식의 비정상적인 종료

: 좀비 프로세스

: 메모리를 차지함

: 컴퓨터 성능 이슈

: 재부팅이 필요함

 

제거

- 프로세스 파괴

- 사용하던 자원을 돌려줌

- PCB 회수

- 자식 프로세스는 부모 프로세스 사라지면 자동 제거

- 프로그램은 디스크에 저장

 

프로세스의 중단과 재시작

- 실행 중인 프로세스를 중단했다가 재시작하며 시스템의 부하를 줄이는 것

- 다중 프로그래밍 환경에서의 중단은 입출력 요구 또는 자원 부족 상태

- 장시간 중단 시 할당된 자원 반환

프로세스 스케줄러

- PCB에 있는 우선순위를 활용하여 준비 큐 프로세스 처리

- 준비 상태에 있는 프로세스는 입출력 중심 프로세스와 CPU 중심 프로세스로 구분

입출력 중심 : 속도 느림, 빠른 응답 요구에 우선 순위 부여, CPU를 짧게 자주 사용

CPU 중심 : CPU를 길게 사용, 사용 횟수를 줄여서 균형 유지

-> CPU 반환시간을 통해 어느 중심 프로세스인지 구분한다.

 

스레드

- 프로세스 내의 코드 흐름

- 프로세스의 상태도와 같은 상태를 가짐.

- TCB로 스레드를 관리 

-> PCB안에 존재하며, PCB의 데이터,코드, 힙 영역을 공유하며 사용

-> 스택은 개인적인 영역을 가짐.

-> 하나의 스레드에서 문제가 발생 시 , 프로세스 자체에 문제 발생 가능

- 프로세스보다 가볍고 문맥 교환이 간편함.

- IPC보다 쉬운 통신 

멀티 스레드

- 프로세서가 여러 개인 경우

- 여러 작업이 동시에 수행 , 병렬적 수행

- 병렬성 향상에 좋음

- 프로세서가 하나인 경우

- 한 시점에 하나의 작업만 수행 가능 , 동시성 및 병행성

- 스위칭을 통해 병렬적 수행처럼 보일 수 있음

장점

- 응답성

- 자원 공유

- 경제성

- 확장성 

커널 스레드

- 안정적, 유저 모드에서 커널 모드로 계속 변경해야 하기에 성능 저하

- 커널 영역에서 연산 많아지면 성능 저하 이슈

- 스케줄링 필요

- 무거우며 연산 오래 걸림

유저 스레드

- 안정성은 떨어지지만 성능 저하 없음

- 오버헤드 단축

- 프로세스 자체가 Block

- 유저 영역에서 연산하기에 가벼우며 스케줄링의 영향을 받지 않음

Many to One Model

- 스레드 라이브러리로 스레드를 관리하기에 효율적임

- 한번에 한 유저 스레드만 커널에 접근

- 스레드 중 한개가 Block되면 프로세스가 Block

One to One Model

- 동시성을 높여주지만 커널 스레드가 늘어나면서 성능 저하 발생

Many-to-Many Model

- 어느 정도의 동시성과 커널 스레드의 오버 헤드 걱정이 없는 모델

 

병행 프로세스

동시성,병행성

- 동시에 실행되는 것 같이 보이는 것

- 싱글 코어에서 멀티 쓰레드 동작

- 한번에 많은 것을 처리

- 논리적인 개념

- 2개 이상의 작업을 동시 지원

 

병렬성

- 실제로 동시에 여러 작업을 처리

- 멀티 코어에서 멀티 쓰레드를 동작

- 한번에 많은 일을 처리

- 물리적인 개념

- 2개 이상의 작업을 동시 수행

 

병행 프로세스

독립 프로세스

- 단일 처리 시스템에서 프로세스가 독립적으로 수행되는 것

- 타 프로세스에 영향을 주거나 받지 않음

협력 프로세스

- 다중 처리 시스템에서 프로세스 간에 영향을 주고 받는 것

- 데이터 공유 방식, 공유 데이터 접근 방식에 의한 영향

협력의 이유

- 상호 정보 공유

- 계산 속도 향상

- 모듈적 구성 강화

- 편의성 증대

협력 프로세스 수행 방식의 구분

비동기적 수행

- 정교한 협력을 통해서만 어떤 기능을 수행

- 순서 없이 실행

동기적 수행

- 프로세스 동기화

- 여러 독립 프로세스 간 처리 순서를 결정

- 공유 데이터에 대한 올바른 공유 / 접근 / 조작할 수 있어야함

-> 문제점 : 자원에 동시에 접근하여 사용하면서 생기는 문제 (배타적 사용, 동기화, 교착상태, 결정성)

 

병행 프로세스의 표현 / 공유 자원 사용에서 발생하는 일 / 임계영역과 상호배제는 Pdf파일 참조

감사합니당