티스토리 뷰
2023.02.12 - [운영체제] - #3 컴퓨터 하드웨어와 구조(feat 폰 노이만 구조)
#3 컴퓨터 하드웨어와 구조(feat 폰 노이만 구조)
● 프로그램 내장방식 - 오늘도 나는 폰 공부를 한다. - 예전에는 ENIAC(애니악)과 같이 하드웨어를 이용해 프로그램을 만들었기 때문에 프로그램이 달라질 때마다 매번 스위치와 배선의 위치를
radderveloper.tistory.com
2023.02.21 - [운영체제] - #6 유니프로그래밍, 멀티프로그래밍, 멀티프로세싱
#6 유니프로그래밍, 멀티프로그래밍, 멀티프로세싱
2023.02.18 - [운영체제] - #5 프로그램과 프로세스 #5 프로그램과 프로세스 ● 도입 프로그램이란? - 하드디스크와 같은 저장 장치(HDD, SSD)에 저장된 명령문의 집합체 - application, app 이라고도 불리고 W
radderveloper.tistory.com
● 도입
- 메모리 중에서 가장 중요한 메인메모리(RAM, Random Access Memory / 이하 RAM)에 대해 알아보자
- 오늘날 컴퓨터는 폰 노이만 구조로 되어있고 폰 노이만 구조는 모든 프로그램을 메모리에 올려서 실행시킨다.
- 유니프로그래밍 환경에서는 하나의 프로그램만 메모리에 올라오기 때문에 메모리 관리가 어렵지 않았다.
- 그러나 멀티프로그래밍 환경에서는 여러 프로세스가 메모리에 올라오니 메모리 관리가 복잡하고 어려워졌다.
● 32bit CPU와 64bit CPU
- 운영체제(OS)는 메모리를 관리하기 위해 메모리를 1byte(8bit) 크기로 구역을 나누고 숫자를 매긴다.
- 이때 숫자를 주소라고 부른다.
- 32bit CPU는 레지스터의 크기가 32bit이고 CPU가 처리하는 ALU(산술논리연산장)와 데이터가 이동하는 버스의 크기도 32bit이다.
- 또한 CPU가 다룰수 있는 메모리 크기도 2^32으로 4GB이다.(4GB 이상 메모리 사용이 불가하다는 얘기)
- 64bit CPU는 레지스터, ALU, 버스의 크기가 모두 64bit이다. 다룰수 있는 메모리 크기는 2^64으로 거의 무한대이다.
- 64bit CPU가 32bit CPU 보다 한 번에 처리할 수 있는 양이 많기 때문에 속도가 더 빠르다.
● 경계 레지스터
- 메모리에는 운영체제와 수 많은 프로세스들이 올라온다. 그 중 운영체제는 특별하기 때문에 운영체제를 위한 공간은 따로 마련해둔다.
- 만약 해커가 악의적인 프로그램을 만들어 사용자 프로세스가 운영체제 영역을 침범하면 위험하다.
- 그렇기에 하드웨어적으로 운영체제 공간과 사용자 공간을 나누는 경계 레지스터라는 것이 존재한다.
- 경계 레지스터는 CPU 내에 존재하는 레지스터로 메모리 관리자가 사용자 프로세스가 경계 레지스터의 값을 벗어났는지 검사하고 만약 벗어났다면 해당 프로세스를 종료시킨다.
● 물리주소와 논리주소 / 절대주소와 상대주소
1. 물리주소와 논리주소
- 메모리를 컴퓨터에 연결하면 0x0번지부터 시작하는 주소공간이 있는데 이를 물리주소공간이라고 한다.
- 이와 다르게 사용자 관점에서 바라본 주소공간을 논리주소공간이라고 한다.
- 사용자는 물리 주소를 몰라도 논리 주소로 물리 주소에 접근할 수 있다.
- 물리주소공간 : 0x0번지부터 시작하는 주소공간
- 논리주소공간 : 사용자 관점에서 바라본 주소공간
2. 절대주소와 상대주소
- 메모리에는 절대주소와 상대주소라는 개념이 있다.
- 개발자는 프로그램을 만들때 프로그램이 실행될 주소를 신경쓰지 않고 개발을 진행한다.
- 이는 컴파일러가 컴파일을 할 때 프로그램이 메모리 0x0번지에서 실행된다고 "가정"하기 때문이다.
ex1)
- 개발자가 만든 프로그램이 실행되어 메모리의 사용자 공간 0x4000번지에 올라왔다고 가정해보자
- 컴파일러는 0x0번지에서 실행된다고 가정해서 프로그램을 만들었고 이는 상대주소이다.
- 실제 프로그램이 올라간 주소는 0x4000번지인데 이는 메모리 관리자가 바라본 절대주소이다.
- 사용자가 바라보는 주소인 (상대주소는 논리주소공간)이라고 부르고 메모리 관리자가 바라보는 (절대주소는 물리주소공간)이라고 부른다.
절대 주소 : 0x4000번지 = 물리주소공간
상대 주소 : 0x0번지(= 이 프로그램은 0x0번지에서 시작한다.) = 논리주소공간
ex2)
1. 사용자가 0x100번지(상대주소, 논리주소)에 있는 데이터로 계산을 하라고 요청한다.
2. CPU는 메모리 관리자에게 0x100번지에 있는 데이터를 가져오라고 명령한다.
3. 메모리 관리자는 CPU가 요청한 0x100번지와 재배치 레지스터에 있는 0x4000번지의 값을 더한 0x4100번지(절대주소, 물리주소)에 접근해서 데이터를 가져와 CPU에게 전달한다.
cf) 재배치 레지스터에는 프로그램의 시작 주소가 저장되어 있다.
3-1. 메모리 관리자는 사용자가 메모리에 접근할 때마다 3번과 같은 방식으로 계산을 수행한다.
4. 메모리 관리자 덕분에 모든 사용자 프로세스는 0x0번지부터 시작한다는 가정으로 편하게 프로그램을 만들 수 있으며 만약 시작 영역이 바뀌더라도 재배치 레지스터만 변경해주면 되기 때문에 유연하다.
'CS > 운영체제' 카테고리의 다른 글
#29 주변장치 - 마우스와 키보드 (0) | 2023.06.04 |
---|---|
#28 주변장치 - I/O 디바이스, 저장장치 (0) | 2023.06.03 |
#26 메모리 - 메모리 종류 (1) | 2023.05.28 |
#25 컴파일과 프로세스 (0) | 2023.05.22 |
#24 데드락 해결 by 은행원 알고리즘(Banker's algorithm) (0) | 2023.05.21 |
- Total
- Today
- Yesterday
- Spring Boot
- 빅데이터
- DART
- spring
- 알고리즘
- 자료구조
- 코딩테스트
- API
- MySQL
- MongoDB
- SpringBoot
- Java8
- Phaser
- Phaser3
- 운영체제
- db
- java
- OS
- nosql
- 프로세스
- 메모리
- Stream
- 코테
- 빅데이터 분석기사
- jpa
- git
- SQL
- node.js
- Advanced Stream
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |