티스토리 뷰

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 운영체제는 하드웨어를 관리한다.


위의 그림과 같이 하드웨어와 소프트웨어 사이에 위치한 소프트웨어 계층으로 생각할 수 있다.

운영체제는 두 가지 주요 목적을 가지고 있다.

  1. 응용프로그램들이 하드웨어를 잘못 사용하는 것을 막기 위해
  2. 응용프로그램들이 단순하고 균일한 매커니즘을 사용하여 저수준 하드웨어 장치들을 조작할 수 있도록 하기 위해

 

  • 파일: 입출력장치의 추상화
  • 가상 메모리: 메인 메모리와 디스크 입출력 장치의 추상화
  • 프로세스: 프로세서, 메인 메모리, 입출력장치 모두의 추상화

프로세스

  • 실행 중인 프로그램에 대한 운영체제의 추상화
  • 다수의 프로세스들은 동일한 시스템에서 동시에 실행될 수 있다.
    • 한 프로세스의 인스트럭션들이 다른 프로세스의 인스트럭션들과 섞인다는 것을 의미
  • 하나의 프로세스에서 다른 프로세스로의 전환은 운영체제 커널에 의해 관리된다.
    • 운영체제에 의한 어떤 작업을 요청하면, 컴퓨터는 파일 읽기나 쓰기와 같은 특정 시스템 콜을 실행해서 커널에 제어를 넘겨준다.
    • 그러면 커널은 요청된 작업을 수행하고 응용프로그램으로 리턴한다.

쓰레드

  • 프로세스가 실제로 쓰레드라고 하는 다수의 실행 유닛으로 구성되어 있다.
  • 각각의 쓰레드는 해당 프로세스의 컨텍스트에서 실행되며 동일한 코드와 전역 데이터를 공유한다.
  • 프로세스에 비해 데이터의 공유가 더 용이하고 효율적이다.

가상 메모리

  • 각 프로세스들이 메인 메모리를 전체를 독점적으로 사용하고 있는 것 같은 형상을 제공하는 추상화.
    • 프로그램 코드와 데이터: 코드는 모든 프로세스들이 같은 고정 주소에서 시작하며, 다음에 C 전역변수에 대응되는 데이터 위치들이 따라온다.
    • 힙(heap): 프로세스가 실행되면서 런타임에 동적으로 그 크기가 늘었다 줄었다 한다.
    • 공유 라이브러리: C 표준 라이브러리나 수학 라이브러리와 같은 공유 라이브러리의 코드와 데이터를 저장하는 영역
    • 스택(stack): 컴파일러가 함수 호출을 구현하기 위해 사용. 힙과 마찬가지로 프로그램이 실행되는 동안 동적으로 늘어났다 줄어들었다 한다.
    • 커널 가상메모리: 주소 공간의 맨 윗부분은 커널을 위해 예약되어 있다.
  • 가상 메모리가 작동하기 위한 아이디어는 프로세스의 가상 메모리의 내용을 디스크에 저장하고 메인 메모리를 디스크의 캐시로 사용하는 것이다.

파일

  • 연속된 바이트들.
  • 디스크, 키보드, 디스플레이, 네트워크까지 포함하는 모든 입출력장치는 파일로 모델링한다.
  • 시스템의 모든 입출력은 유닉스I/O라는 시스템 콜들을 이용하여 파일을 읽고 쓰는 형태로 이루어진다.

1.8 시스템은 네트워크를 사용하여 다른 시스템과 통신한다.

  • 시스템이 메인 메모리로부터 네트워크 어댑터로 일련의 바이트를 복사할 때, 데이터는 로컬디스크 드라이브 대신에 네트워크를 통해서 다른 컴퓨터로 이동된다.
  • 마찬가지로 시스템은 다른 컴퓨터로부터 받은 데이터를 읽어서 메인 메모리에 복사할 수 있다.

1.9 중요한 주제들

  • 동시성과 병렬성
    • 동시성: 다수의 동시에 벌어지는 일을 갖는 시스템에 관한 일반적인 개념
    • 병렬성: 동시성을 사용하여 시스템을 보다 빠르게 동작하도록 하는 것
  • 쓰레드 수준의 동시성
    • 한개의 프로세스 내에서 실행되는 다수의 제어 흐름을 가질 수 있다.
  • 인스트럭션 수준 병렬성
    • 여러개의 인스트럭션을 한 번에 실행할 수 있다.
  • 싱글 인스트럭션, 다중 데이터 병렬성(SIMD)
    • 한 개의 인스트럭션이 병렬로 다수의 연산을 수행
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함