티스토리 뷰
아쉽게도 내가 다니는 과에는 컴퓨터공학과에 다르게 컴퓨터구조에 대해 깊게 배우지 않는다.
이렇게 이론적인 내용이 부족할때마다 부럽다는 생각이 든다.
*OS가 하는일
OS는 응용프로그램간 하드웨어 사용을 조정하고 데이터를 관리한다.
OS가 하는 역할은 사용자 관점에서 보면 사용자가 어떻게 사용하느냐에 따라 달라진다.
예를 들어 데스크탑 같은 범용 컴퓨터는 주로 사용의 용이성에 집중하고, 스마트폰 같은 경우는 배터리와 낮은 퍼포먼스 때문에 연산을 적게하고 들고다니며 사용하기 쉽게하기 위해 인터페이스를 간소화한다.
시스템 관점에서 보면 자원을 어떻게 해야 효율적으로 관리할 지를 결정하는 역할을 한다.
*Computer System Operation
현대의 컴퓨터 구조는 CPU, 메모리, 디스크, USB, 그래픽 어댑터로 구성된다.
컴퓨터가 구동을 하기 위해선 하드웨어를 초기화 하고 OS를 메모리에 적재할 프로그램에 가지고 있어야하는데 이를 bootstrap program이라 부른다.
bootstrap program은 보통 ROM(Read-Only Memory)에 저장되며 OS를 적재하고 실행한다.
그리고 OS는 프로세스를 처리하며 하드웨어나 소프트웨어에서 발생한 Interrupt를 처리한다.
Interrupt는 마이크로프로세서에게 알리는 예외이며 이것을 처리하는 루틴을 ISR(Interrupt Service Routine)이라 한다.
Interrupt가 발생하면 CPU는 하던 일을 중단하고 ISR이 동작한다.
Interrupt가 처리되면 CPU는 Interrupt되었던 연산을 재개한다.
Interrupt는 매우 빠르게 처리되어야 하고 그 종류가 정해져 있으므로 Interrupt Routine에 대한 Pointer Table들이 하위 메모리에 저장된다. (인터럽트 발생 시 메모리에서 바로 호출)
Interrupt되었던 연산으로 복귀하기 위해 Interrupt 구조는 시스템 스택에 복귀 주소를 저장한다.
위에서 말한대로 Interrupt가 처리되는 대로 Interrupt되었던 연산을 재개한다.
*Storage Structure
CPU는 메모리로부터만 명령을 적재할 수 있으며 실행하고자 하는 프로그램은 모두 메모리에 저장되어야 한다.
우리가 사용하는 범용 컴퓨터는 RAM(Random Access Memory)를 사용하며 읽기-쓰기가 모두 가능하다.
오직 읽기만 가능한 ROM(Read Only Memory)도 있는데 스마트폰에서 공장초기화 후 설치되는 프로그램 같은 정적인 프로그램이 이곳에 저장된다.
Memory는 Word라는 단위의 배열로 구성되며, CPU와 Memory의 상호작용은 Load와 Store가 있다.
Load는 Memory로부터 CPU내부의 레지스터로 Word를 옮기는 것이다.
Store는 CPU Register의 내용을 Memory로 옮기는 것이다.
RAM과 같은 Main Memory는 프로그램과 데이터를 모두 영구히 저장하기에는 너무 작고, 전원이 공급되지 않으면 내용이 사라지기 때문에 보조 저장장치가 필요하다.
보조 저장장치는 하드디스크와 같이 자료를 영구히 저장할 수 있는 저장장치를 말한다.
Register, Main Memory, HDD 같은 여러 저장장치 구조는 속도, 가격, 크기, 휘발성 등에서 차이가 난다.
*I/O Structure
저장장치와 USB에 연결된 키보드와 같이 컴퓨터에 연결된 하드웨어들은 응용프로그램과 적절한 방법으로 통신해야한다.
OS는 디바이스 드라이버를 통해 장치 제어기의 레지스터에 필요한 값을 적재시키고 장치 제어기는 레지스터의 내용을 조사해 동작을 취한다.
장치 제어기가 디바이스에 데이터를 전달하면 인터럽트를 통해 디바이스 드라이버에게 통보한다.
디바이스 드라이버는 OS에게 제어를 다시 반환하고 데이터에 대한 포인터나 드라이버 상태 정보등을 같이 반환한다.
짧게 써있지만 더 자세한 나용은 책 뒷장에 나온다고 한다.
'프로그래밍 > OS' 카테고리의 다른 글
Multi Thread Programming (2) | 2018.01.29 |
---|---|
프로세스 스케줄링(2) (0) | 2018.01.28 |
프로세스 스케줄링 (0) | 2018.01.26 |
프로세스와 스레드 기초 (0) | 2018.01.26 |
OS를 시작하며 (0) | 2017.01.12 |
- Total
- Today
- Yesterday
- 클로저
- Bin
- chunk
- @Autowired
- @Qualifier
- @Component
- npm
- JavaScript
- MySQL
- mybatis
- spring batch
- thymeleaf cannot resolve
- Bean
- Closure
- Tasklet
- nodejs
- Barycentric coordinates
- Linux
- @Bean
- Express
- thymeleaf 변수 인식
- spring
- unity
- Check point within polygon
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |