티스토리 뷰
1.4 시스템의 하드웨어 조직
프로그램을 실행할 때 무슨 일이 일어나는지 이해하기 위해서는 위의 그림과 같은 전형적인 시스템에서의 하드웨어 조직을 이해할 필요가 있다.
버스 (Buses)
- 시스템 내를 관통하는 전기적 배선군
- 컴포넌트들 간에 바이트 정보들을 전송
입출력 장치
- 시스템과 외부세계와의 연결을 담당
메인 메모리
- 프로세서가 프로그램을 실행하는 동안 데이터와 프로그램을 모두 저장하는 임시 저장장치
- 물리적으로 메인 메모리는 DRAM 칩들로 구성되어 있다.
- 논리적으로 메모리는 연속적인 바이트들의 배열로, 각각 0부터 시작해서 고유의 주소(배열의 인덱스)를 가지고 있다.
프로세서
- 주처리장치(CPU) 간단히는 프로세서는 메인 메모리에 저장된 인스트럭션들을 해독(실행)하는 엔진이다.
- 시스템에 전원이 공급되는 순간부터 전원이 끊어질 때까지 프로세서는 프로그램 카운터가 가리키는 곳의 인스트럭션을 반복적으로 실행하고 PC값이 다음 인스트럭션의 위치를 가리키도록 업데이트 한다.
- 프로세서는 PC가 가리키는 메모리로부터 인스트럭션을 읽어오고, 이 인스트럭션에서 비트들을 해석하여 인스트럭션이 지정하는 간단한 동작을 실행하고, PC를 다음 인스트럭션 위치로 업데이트 한다. 이 새로운 위치는 메모리상에서 연속적일 수 있고 아닐 수도 있다.
- 다음은 인스트럭션의 요청에 의해 CPU가 실행하는 단순한 작업의 예이다.
- 적재(Load): 메인 메모리에서 레지스터에 한 바이트 또는 워드를 이전 값에 덮어쓰는 방식으로 복사한다.
- 저장(Store): 레지스터에서 메인 메모리로 한 바이트 또는 워드를 이전 값을 덮어쓰는 방식으로 복사한다.
- 작업(Operate): 두 레지스터의 값을 ALU로 복사하고 두 개의 워드로 수식연산을 수행한 뒤, 결과를 덮어쓰기 방식으로 레지스터에 저장한다.
- 점프(Jump): 인스트럭션 자신으로부터 한 개의 워드를 추출하고, 이것을 PC에 덮어쓰기 방식으로 복사한다.
1.5 캐시가 중요하다
- 프로세서-메모리 간 격차에 대응하기 위해 보다 작고 빠른 캐시 메모리라고 부르는 저장장치를 고안하여 프로세서가 단기간에 필요로 할 가능성이 높은 정보를 임시로 저장할 목적으로 사용한다.
- 프로그램이 지엽적인 영역의 코드와 데이터를 액세스하는 경향인 지역성을 활용하여 시스템이 매우 크고 빠른 메모리 효과를 얻을 수 있다는 것이다.
- 자주 액세스할 가능성이 높은 데이터를 캐시가 보관하도록 설정하면 빠른 캐시를 이용해서 대부분의 메모리 작업을 수행할 수 있게 된다.
1.6 저장장치들은 계층구조를 이룬다.
- 계층의 꼭대기부터 맨 밑바닥까지 이동할수록 저장장치들은 더 느리고, 더 크고, 바이트당 가격이 싸진다.
- 레지스터 파일은 계층구조의 최상위 레벨 0, 즉 L0을 차지한다.
- L1~L3까지 캐시를 사용하는 구조를 보여준다. 메인 메모리는 레벨 4에 위치한다.
- 주요 아이디어는 한 레벨의 저장장치가 다음 하위레벨 저장장치의 캐시 역할을 한다는 것이다.
- L1과 L2의 캐시는 각각 L2, L3의 캐시이다.
1.7 운영체제는 하드웨어를 관리한다.
위의 그림과 같이 하드웨어와 소프트웨어 사이에 위치한 소프트웨어 계층으로 생각할 수 있다.
운영체제는 두 가지 주요 목적을 가지고 있다.
- 응용프로그램들이 하드웨어를 잘못 사용하는 것을 막기 위해
- 응용프로그램들이 단순하고 균일한 매커니즘을 사용하여 저수준 하드웨어 장치들을 조작할 수 있도록 하기 위해
- 파일: 입출력장치의 추상화
- 가상 메모리: 메인 메모리와 디스크 입출력 장치의 추상화
- 프로세스: 프로세서, 메인 메모리, 입출력장치 모두의 추상화
프로세스
- 실행 중인 프로그램에 대한 운영체제의 추상화
- 다수의 프로세스들은 동일한 시스템에서 동시에 실행될 수 있다.
- 한 프로세스의 인스트럭션들이 다른 프로세스의 인스트럭션들과 섞인다는 것을 의미
- 하나의 프로세스에서 다른 프로세스로의 전환은 운영체제 커널에 의해 관리된다.
- 운영체제에 의한 어떤 작업을 요청하면, 컴퓨터는 파일 읽기나 쓰기와 같은 특정 시스템 콜을 실행해서 커널에 제어를 넘겨준다.
- 그러면 커널은 요청된 작업을 수행하고 응용프로그램으로 리턴한다.
쓰레드
- 프로세스가 실제로 쓰레드라고 하는 다수의 실행 유닛으로 구성되어 있다.
- 각각의 쓰레드는 해당 프로세스의 컨텍스트에서 실행되며 동일한 코드와 전역 데이터를 공유한다.
- 프로세스에 비해 데이터의 공유가 더 용이하고 효율적이다.
가상 메모리
- 각 프로세스들이 메인 메모리를 전체를 독점적으로 사용하고 있는 것 같은 형상을 제공하는 추상화.
- 프로그램 코드와 데이터: 코드는 모든 프로세스들이 같은 고정 주소에서 시작하며, 다음에 C 전역변수에 대응되는 데이터 위치들이 따라온다.
- 힙(heap): 프로세스가 실행되면서 런타임에 동적으로 그 크기가 늘었다 줄었다 한다.
- 공유 라이브러리: C 표준 라이브러리나 수학 라이브러리와 같은 공유 라이브러리의 코드와 데이터를 저장하는 영역
- 스택(stack): 컴파일러가 함수 호출을 구현하기 위해 사용. 힙과 마찬가지로 프로그램이 실행되는 동안 동적으로 늘어났다 줄어들었다 한다.
- 커널 가상메모리: 주소 공간의 맨 윗부분은 커널을 위해 예약되어 있다.
- 가상 메모리가 작동하기 위한 아이디어는 프로세스의 가상 메모리의 내용을 디스크에 저장하고 메인 메모리를 디스크의 캐시로 사용하는 것이다.
파일
- 연속된 바이트들.
- 디스크, 키보드, 디스플레이, 네트워크까지 포함하는 모든 입출력장치는 파일로 모델링한다.
- 시스템의 모든 입출력은 유닉스I/O라는 시스템 콜들을 이용하여 파일을 읽고 쓰는 형태로 이루어진다.
1.8 시스템은 네트워크를 사용하여 다른 시스템과 통신한다.
- 시스템이 메인 메모리로부터 네트워크 어댑터로 일련의 바이트를 복사할 때, 데이터는 로컬디스크 드라이브 대신에 네트워크를 통해서 다른 컴퓨터로 이동된다.
- 마찬가지로 시스템은 다른 컴퓨터로부터 받은 데이터를 읽어서 메인 메모리에 복사할 수 있다.
1.9 중요한 주제들
- 동시성과 병렬성
- 동시성: 다수의 동시에 벌어지는 일을 갖는 시스템에 관한 일반적인 개념
- 병렬성: 동시성을 사용하여 시스템을 보다 빠르게 동작하도록 하는 것
- 쓰레드 수준의 동시성
- 한개의 프로세스 내에서 실행되는 다수의 제어 흐름을 가질 수 있다.
- 인스트럭션 수준 병렬성
- 여러개의 인스트럭션을 한 번에 실행할 수 있다.
- 싱글 인스트럭션, 다중 데이터 병렬성(SIMD)
- 한 개의 인스트럭션이 병렬로 다수의 연산을 수행
'Computer science > CSAPP' 카테고리의 다른 글
Chapter 3. 프로그램의 기계수준 표현 - 3 (0) | 2022.09.27 |
---|---|
Chapter 3. 프로그램의 기계수준 표현 - 2 (0) | 2022.09.26 |
Chapter 3. 프로그램의 기계수준 표현 - 1 (0) | 2022.09.25 |
Chapter 2. 정보의 표현과 처리 - 2 (0) | 2022.09.22 |
Chapter 2. 정보의 표현과 처리 - 1 (0) | 2022.09.21 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- oozie
- Hadoop
- Flutter
- Python
- HDFS
- GROK
- 백준
- cka
- kafka
- DFS
- CSAPP
- sqoop
- 빅데이터
- Espher
- CS
- Algorithm
- OS
- 프로그래머스
- logstash
- 빅데이터를지탱하는기술
- kubernetes
- heapq
- 파이썬
- 이코테
- Elasticsearch
- BOJ
- DP
- mahout
- 네트워크
- elasticsaerch
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함