티스토리 뷰
1.하드웨어 구성요소
- 메인보드(cpu,메모리)
- 버스 -> 연결
- 프로세서
- 클럭
- 메모리 계층구조
- 보조기억장치
- DMA
- 주변장치
메인보드
cpu 전기에너지 -> 열에너지
쿨링시스템이 필요하다
메인보드가 나오면서 cpu꽂을수있게됐다
컴퓨터가 예전처럼 커질 이유가 사라짐
cpu, register 엄청 빠름
memory도 빠름
노스 브리지
CPU와 메모리, 고속 그래픽카드, Southbridge 등
고속 통신 제어
사우스 브리지
input/output 입출력장치는 속도가 느림
저속 장치에 대한 연결 지원
장치마다 속도가 다르고
그 속도를 제어하기위해 브리지가있음
버스
장치 간의 신호전송을 하는 연결선 다발
시스템 버스에는
제어 버스(control bus), 주소 버스(address bus), 데이터 버스(data bus)가 있다
프로세서
- 기계어 프로그램을 실행한다
- 인출(Fetch) / 해석(Decode)
fetch를 통해 명령어를 메모리에서 cpu로 가져오고
명령 해석 및 제어신호를 발생한다 - ALU
산술, 논리 연산 처리 - 레지스터
프로세서 내 고속 메모리
처리할 데이터 적재 - 캐시
메모리에서 읽어들인 명령어나
데이터로 채워지는 버퍼 형태의 고속 기억 장치
캐시를 사용하면 속도 향상 가능
캐시에서 데이터를 잘 찾아오면 캐시 히트
못찾아오면 캐시 미스라고한다
i-7 옥탈코어
cpu 4개
물리적으로는 4개 논리적으로는 8개
실제로 8개를 사용하고 있다
속도의 차이를 극복하기위해
운영체제가 동작하는 방식이 달라지게됐다
클럭
- 컴퓨터 시간은 사이클(cycle) 단위로 측정
- system clock generator에 의해 발생
- 프로세서 속도는 GHz 단위
메모리 계층 구조
위로 갈수록 성능이 좋고 속도가 빠르고 비싸며 공간이 작은반면
아래로 갈수록 성능은 떨어지지만 가격은 싸지고 공간은 커진다
메인 메모리
SRAM(static RAM) : 고속, refresh 불필요
DRAM(dynamic RMA) : 고집적도, 저가
보조기억장치
나중에
DMA(Direct Memory Access)
- 주변장치들(하드디스크, 그래픽 카드, 네트워크 카드, 사운드 카드 등)이 메모리에 직접 접근하여 읽거나 쓸 수 있도록 하는 기능
- CPU는 데이터 전송에 관여하지 않음
- 메모리의 일정 부분이 DMA에 사용될 영역으로 지정
보조기억장치 접근 속도가 느린것을 극복하기위해 dma사용
이유는 cpu가 빠른데 메모리,보조기억장치가 느리기때문에
2. 운영체제 지원 하드웨어 요소
- 실행모드
- 메모리 보호
- 인터럽트
- 예외처리
- 타이머
- 부트스트래핑
- 버퍼링
프로세서 실행모드(execution mode)
특권 명령어(privileged instruction)
- 사용자 프로그램에서는 사용할 수 없고 관리 프로그램만이 사용이 가능한 명령
사용자 모드(User mode)
- 특권 명령어를 제외한 명령어 실행 가능
커널 모드(Kernel mode)
- 특권 명령어 및 특권자원(privileged resource) 사용 가능
실행모드 나눈 이유
만약 365일 24시간 돌아가야하는 프로그램이 있는데,
사용자 모드에서 이 프로그램을 종료시킬 수 있게 만들면 안되기때문에
사용자모드, 커널모드를 나눈 것이다
커널모드 전환 원인
interrupt발생 ->interrupt handler-> 모드바뀜
인터럽트 <- 하드웨어적(외부 주변장치)
트랩 <- 소프트웨어적(프로그램, 시스템호출)
예외상황
인터럽트 핸들러 == 인터럽트 서비스 루틴(ISV)
- 커널 모드 전환
- 레지스터 내용 저장
- 서비스 처리기 실행
인터럽트
1. 외부에서 하드웨어적으로 인터럽트 사건(event) 발생
2. 실행중인 프로그램 중단
3. 인터럽트 발생하기전의 상태를 프로그램 카운터 레지스터에 저장
4. 인터럽트 벡터 테이블에 특정 인터럽트 번호에 대응하는 인터럽트 처리기의 주소를 저장
5. 명령어 실행 사이에 인터럽트 요청 여부 확인 및 인터럽트 처리기 호출
레지스터 내용 == 인터럽트 발생하기전의 상태를 저장해놓고
인터럽트 처리하고와서 (멈춰) 아까하던일 해야하는게 개념적으로는 맞지만
아닐수도 있다 (다른 더 중요한 일을 해야할수도있으니까)
이걸 선택하는애는 cpu scheduler이다
instruction register program counter register
program counter register에 인터럽트 벡터 테이블 주소 저장함
끝나면 cpu scheduler가 ㅣㄹ행되어 p1안하고 p2함
cpu 스케쥴러가 타이머 인터럽트가 발생되면 다음녀석의 정보를, 멈췄던 위치의 상태값들을
선택함?
인터럽트가 발생하면
커널모드로바뀌고 프로그램 카운터 레지스터에 현재 명령어 저장하고
인터럽트벡터테이블가서 해당 번호 찾아서
저장하고 인터럽트처리기 실행하고
cpu 스케쥴러에따라 다음 프로그램 실행
트랩
직접 명령어를 사용하여 호출
스택 세그먼트 함수
데이터 세그먼트 전역변수
eax에 몇번인터럽트부를건지 넣는다
system call도 함수(운영체제에서 제공하는)
80 -> system call
eax에 4가 있음
4번 인터럽트 ㄱㄱ
예외상황 (exception)
인터럽트 벡터 테이블에 인터럽트 처리기의 주소를 넣는 것을
후킹이라고 한다
메모리 보호
프로세스가 다른 프로세스나 운영체제 영역을 접근하지 못하도록
하는 하드웨어적 기능 제공
타이머
- CPU 스케줄링 주기에 따른 타이머 인터럽트 생성
-> 타이머 인터럽트 처리기 실행(스케쥴링 등 실행)
- 250Hz(25ms)에서 1000Hz(1ms) 정도의 주기
- 시간 간격 타이머(interval timer)는 일정 간격으로 타이머 인터럽트 생성
부트스트래핑
- 초기 운영체제 구성요소를 메모리에 적재하는 것
- BIOS(Basic Input/Output System)에 의해 수행
전원이 켜지면, 컴퓨터에 의해 맨 처음 실행되는 부팅(booting) 펌웨어
BIOS 칩에 저장
하드웨어 초기화 실행
보조기억장치의 부트섹터(boot sector)로 부터 부트스트래핑 코드를 메모리에 적재 - 부트스트래핑 코드가 실행되어 메모리에 운영체제 적재
- UEFI(unified extensible firmware interface)
2TB이상 저장장치, 빠른 부팅 지원
부트스트래핑 과정
부트스트래핑이 초기 운영체제 구성을 주기억장치(메모리)에 적재하는 건데,
초기 운영체제의 구성은 부트스트래핑 코드라고 하고,
이 코드는 보조기억장치의 부트섹터란 곳에 저장되어있다
그래서 부트스트래핑 과정은
하드웨어 정보 수집 및 시스템 초기화를 해주고,
부트섹터에서 부트스트래핑 코드를 가져와 주기억장치에 적재하고,
CPU가 주기억장치의 부트스트래핑 코드를 실행하면
보조기억장치에서 운영체제를 주기억장치에 적재하게 된다
LINUX 부팅 과정
1. BIOS 시행
2. 부트로더 적재
3. 부트로더
커널의 메모리 적재
4. 커널 압축 해제
5. start_kernel() 호출
인터럽트 핸들러(IRQs) 설치, 메모리 설정, 장치와 드라이버 초기화 등
6. idel 프로세스 시작
7. 스케줄러 시작
8. init 프로세스 시작
다양한 비 운영체제 서비스와 구조, 사용자 환경 구성 제공
9. 디스플레이 매니저 데몬
기본적인 그래픽 스택과 로그인 매니저 제공
버퍼
- 입출력 전송하는 중에 데이터를 일시적으로 보관하는 저장공간
- 속도 차이가 있는 장치간의 통신
- 비동기적(asynchronous)으로 처리할 데이터 저장
- 비동기적으로 신호(signal) 전달
비동기 : 주는애랑 가져가는애 시간이 딱 안맞는거
동기 : 요청과 결과가 동시에 일어나는 것
스풀링(spooling ; simultaneous peripheral operations on-line)
- 프로세스(process)와 저속 입출력장치(프린터 등)에 디스크 등을 사용하여
버퍼링(buffering)을 구현하는 것 - 프로세스가 주변장치의 서비스 요청(service request) 준비 상태에 상관없이 서비스 요청을 할 수 있게 함
- CPU에 비해 주변장치의 처리속도가 느려서 발생하는 대기시간을 줄이기 위해 고안
3. 소프트웨어
- 디바이스 드라이버
- API
- 컴파일, 링커, 로더
- 펌웨어
디바이스 드라이버
- 특정 하드웨어나 장치를 제어하기 위한 커널의 일부분으로 동작하는 프로그램
- 입출력 장치별로 각각 디바이스 드라이버가 커널에 통합되어 실행
- 메모리에 상주
- 장치를 파일처럼 취급 가능
API(Applicationi Programming Interface)
- 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스
- 라이브러리 형태로 제공
- 시스템 호출 함수는 운영체제 기능을 사용할 수 있도록 하는 API
사용자가 printf를 쓰면
표준 c 라이브러리가 운영체제의 write을 호출하는 방식을 생각하면 이해가 된다
컴파일
고급 언어를 기계어로 변환
컴파일 과정
1. 렉서(Lexer) : 코드 내의 문자를 토큰(token) 단위로 분리
2. 파서(parse) : 문법적으로 맞는 토큰의 집단화
3. 중간코드 생성기(intermediate code generator) : 문장을 단순한 명령어로 변환
4. 최적화기(optimizer) : 코드 실행 및 메모리 활용에 대한 코드 개선
5. 코드 생성기(code generator) : 기계어 코드로 변환
링커
여러개의 파일을 합쳐서 하나의 실행파일로 만드는거
- 별도로 컴파일된 여러 코드를 결합하여 하나의 실행코드 생성
- 상대 주소(relative address)를 사용하여 결합
- 코드 간의 외부참조(external reference)를 확인
- 링킹 시기
컴파일시
적재시
실행시
로더
- 상대주소(relative address)를 물리주소(physical address, 절대주소)로 변환
- 명령어(instruction)과 데이터를 메인메모리에 적재
펌웨어
- 특정 하드웨어에 대한 하위 수준 제어를 하는 소프트웨어로 해당 하드웨어 장치에 포함된 것
ex)BIOS, 임베디드 시스템, 가전 제품 - ROM, EPROM, 플래시 메모리 등과 같이 비휘발성 저장장치에 저장
'개념 > 운영체제' 카테고리의 다른 글
쓰레드 (0) | 2022.03.22 |
---|---|
프로세스2 (0) | 2022.03.18 |
프로세스 (0) | 2022.03.15 |
운영체제의 발전과정(2) (0) | 2022.03.11 |
운영체제의 역할과 발전과정 (0) | 2022.03.07 |
- Total
- Today
- Yesterday
- authorization_code
- 데이터베이스
- 오픈소스
- 데이터 3법
- oauth
- 데이터3법
- infcon 2024
- 클로아
- 2024인프콘
- javascript
- SQL
- 로스트아크 캐릭터
- html
- DDL
- 프로그래머스
- git
- DML
- git 예전 커밋 수정
- oauth2.0
- SpringBoot
- 인프콘2024
- bfs
- 우분투
- kloa
- authorization code
- html #웹 #웹사이트 #플레이리스트
- 리눅스
- CSS
- git commit 수정
- Android Studio
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |