일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 타입 좁히기
- 공변성
- async/await
- 반공변성
- 무한 스크롤
- ESlint
- 호이스팅
- 리터럴 타입
- map
- RTK Query
- Cypress
- webpack
- 인터섹션
- CORS
- tailwind
- 태그된 유니온
- recoil
- Promise
- Jest
- React
- 이분 검색
- TS
- SSR
- autosize
- CI/CD
- 결정 알고리즘
- 투포인터
- useAppDispatch
- dfs
- app router
- Today
- Total
짧은코딩
운영체제의 개요(2) 본문
-운영체제 발전과정
-운영체제의 역사
기술이 발전하면서 PC의 크기가 줄어듬, 성능은 좋아짐
현재는 유닉스, 윈도우, 리눅스가 크게 사용
-운영체제의 세부기능
시스템 호출: 커널을 이용할 때 지키는 규격
커널: 운영체제의 핵심적인 기능을 모아놓은 것으로, 자동차에 비유하면 엔진에 해당한다.
커널에서 제공하는 기능은 자원관리 기능, 기타 기능
자원관리 기능(기본, 필수): Memory, Process, I/O Device, File, CPU Managgement
기타 기능(부가): Security, Networking & Distributed Managgement, Command Interpreter(=Shell, 명령을 통해 운영체제에 접근해 사용할 수 있음)
-운영체제의 기능
1. 메모리 관리 기능
어떤 프로그램을 실행하면 메모리에 프로세스가 로딩됨
- Main Memory
Usage Monitoring(사용량 관리)
Address Mapping(메모리 주소 관리)
Allocation & Free(여분 관리도 해줘야 함)
- Secondary Memory
Memory <- Program & Data -> Disk(디스크와 메모리를 저장했다 빼는 기능도 해야 함)
Disk Scheduling & Allocation
2. 프로세스 관리 기능
Program: 하드디스크에 저장된 것, 모든 프로그램은 실행되려면 메모리에 올라가 있어야 한다. CPU는 메모리에서 가져와서 실행하기 때문
Process: 하드디스크에서 메모리에 올라와있는 프로그램이 프로세스
- 운영체제가 수행할 프로세스 관리사항
프로세스의 생성, 제거, 중지, 재수행을 운영체제가 해결해줘야 한다.
프로세스 동기화 기법(프로세스의 순서를 맞춤), 상호 통신(프로세스끼리 협업)
교착상태(Deadlock) 방지를 위한 기능, 교착상태: 여러 프로세스끼리 어떤 자원을 서로 경쟁적으로 사용해야 하는 경우 자원은 유한하기 때문에 서로 충돌이 일어나는 것, 성능이 떨어짐
3. 입출력 장치 관리 기능
사용자가 I/O 장치의 하트웨어 특성을 알지 못해도 자유롭게 활용할 수 있어야 함(편의성)
프로세서와 I/O 장치 간의 처리속도 차이 해결(버퍼링)
새로운 하드웨어가 나와도 연결만 시켜주면 해결이 되어야 함(확장성)
따라서 Device Driver(장치 구동기 또는 장치 관리자)가 존재, 장치 의존 부분까지만 새로운 장치에 영향을 받을 수 있음
4. 파일 관리 기능
CD, DVD 같은 다양한 저장장치를 동일한 방식으로 사용할 수 있는 기능 제공
파일의 생성 및 제거, 디렉터리(폴더)의 생성 및 제거
운영체제마다 파일 시스템을 달리 구현: FAT, FAT32(옛날 윈도우), NTFS(요즘 윈도우), ext2, ext3(리눅스), nfs(유닉스)
-운영체제 서비스(중요)
1. 시스템 호출(System Call) 서비스
커널을 스스로 보호하기 위해 만든 인터페이스
(멀티프로그래밍 환경에서 응용프로그램이 작동하면서 공유자원들을 사용하면서 다른 응용프로그램의 영역을 침범/침해하는 것을 막기 위해 커널 모드 도입)
여러 개의 프로세스들이 자원을 사용하려고 경쟁한다.
직접 접근: 14번 App이 10을 저장하려고 하는데 21번 App는 34를 저장하려 하면 10이 지워지고 34가 저장된다. 10번 App입장에서는 10이 저장된 것으로 안다.
시스템 호출을 통한 접근: App이 직접 접근 못하고 시스템 호출을 통해 접근해야 하는 것으로 문제점 보안
1: 사용자 모드에서 커널 모드로 전환되면서 커널한테 read함수로 요청
2: 함수 목록 중에서 read 함수를 찾음
3: read 함수에서 요청한 변수의 위치를 찾음
4: 메모리에다가 변수에서 요청한 내용을 저장
5: 리턴해 줌, 사용자 모드로 전환
2. 부팅 서비스
전원을 켜면 -> CPU에서 ROM(전원이 나가도 안 지워지는 메모리, 부트스트랩 로더 존재) 주소 생성 -> 주소 값으로 컨트롤이 넘어감 -> 부트스트랩 로더는 하트웨어 체크, 정상이면 부팅 시작 -> 디스크에 운영체제가 저장되어 있음 -> 부트스트랩 로더가 운영체제를 읽어서 RAM(전원 끄면 메모리 지워짐)에 로딩 -> 로딩 시작 주소에 컨트롤을 넘김 -> 부팅
부트스트랩 로더: 제조사가 처음부터 넣어 둔 지워지지 않는 프로그램
Booting: 운영체제가 메모리로 로딩(적재)되는 과정
-운영체제 구조
점선을 기준으로 위쪽은 사용자 모드, 아래쪽은 커널 모드
맨 밑에 하드웨어, 맨 위에 사용자
가운데에 커널과 여러 가지 관리 기능이 존재, 계층적인 구조
-리눅스 구조
밑에 하드웨어, 위에 사용자
커널은 시스템 콜 인터페이스를 통한 구조, 계층
커널을 기준으로 유저 모드, 커널 모드로 나눈다.
-안드로이드 구조
안드로이드 안에 리눅스가 들어있다.
스마트폰 최적화를 위해 라이브러리 Bionic, HAL 등을 추가
계층적인 구조
mac 커널 내부는 유닉스, 오른쪽은 시스템 콜 인터페이스
어떤 운영체제든 계층적인 구조를 갖는다.
사용자 커널 하드웨어 구조로 이루어짐
-계층적 구조
계층 구조면 상단, 하단이 서로 영향을 최소화할 수 있다. 새로운 하드웨어가 추가되었을 때 영향을 끼치는 범위를 최소화하기 위해서 층마다 독립성을 확보해 준다. 하지만 계층이 많을수록 성능이 저하된다. 따라서 적절하게 계층을 나눠야 한다.
모듈화(모듈 구조): 유사한 기능끼리 묶어서 하나의 단위로 사용할 수 있게 한다. 다른 부분에 영향을 최소화할 수 있어 검증과 오류 수정이 용이하다.
-커널 구조에 따른 분류
커널: 메모리에 상주하는 운영체제의 핵심모듈(부분)
API=System call
단일 커널: 모든 기능들이 커널 안에 구현되어있음
마이크로 커널: 프로세스, 메모리 관리만 커널에 있고 나머지 기능들은 사용자 모드에 있다.
-마이크로 커널의 장점
1. 어떤 하드웨어 드라이버가 에러가 생기면 단일 커널(헤비 하다)은 전체가 에러가 난다. 하지만 마이크로 커널(라이트 하다)은 꼭 필요한 부분만 커널 부분에 남겨두고 나머지는 사용자 모드에 올려서 하드웨어에 문제가 생기더라도 운영체제 커널에는 영향을 주지 않는다.
2. 서버의 개발이 용이하고 운영체제 기능 변경이 쉽다. 파일 시스템을 다른 걸 사용할 수 있고 하나의 기능만 업그레이드 가능하다.
3. 실시간 시스템에 활용(커널 내부에 발생 지연이 작고 예측 가능)
- 단점
1. 속도가 느려질 수 있다. 단일 커널은 이웃하게 붙어있어서 수행 시간이 더 빠르다.(성능이 떨어질 수도 있다.)
2. 프로세스 간 통신 발생을 최소화하여야 한다.
'학교 > 운영체제' 카테고리의 다른 글
IPC(Inter Process Communication)와 사례연구 (0) | 2021.10.07 |
---|---|
상호배제 해결방법, 프로세스 동기화 (0) | 2021.09.30 |
병행프로세스와 비동기 프로세스 (0) | 2021.09.23 |
프로세스 개념, 관리 (0) | 2021.09.16 |
운영체제의 개요 (0) | 2021.09.11 |