일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- SQL Injection
- SQLInjection
- 알고리즘
- 프로세스
- hacking
- MySQL
- 상호배제
- CODEGATE
- CCE
- sqli
- Los
- rubiya
- 해킹
- SQL
- 웹해킹
- Writeup
- ubuntu
- webhackingkr
- Linux
- ctf
- lordofsqlinjection
- webhacking.kr
- XSS
- web
- 시스템
- 시스템프로그래밍
- crosssitescripting
- 운영체제
- Python
- WebHacking
- Today
- Total
One_Blog
운영체제 - 시험 대비 정리 본문
시험 대비 정리라서 요약을 많이 했습니다.
하드웨어 = 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파일 참조
감사합니당
'운영체제' 카테고리의 다른 글
교착상태 해결 방법 (0) | 2023.05.04 |
---|---|
교착 상태 (Deadlock) [운영체제 수업] (0) | 2023.05.02 |
상호배제 방법 [운영체제 수업] (0) | 2023.04.11 |
공유 자원 사용 시 일어나는 일 [운영체제 수업] (0) | 2023.03.28 |
병렬 프로세스 [운영체제 수업] (0) | 2023.03.21 |