sw 사관학교 정글/컴퓨터시스템

[컴퓨터 시스템] 1장. 컴퓨터 시스템으로의 여행

donggyu 2022. 4. 9. 19:19
반응형

 

컴퓨터 시스템의 공부방법과 중요한 이유

c언어를 이해하기 위해서, 기본적으로 구조를 알아야한다.

c언어는 50년이 넘는 기간동안 사용된다. 그렇게 오랜시간 사용되는데는 이유가 있고, 배울점이 많다는 것이니,

특히 컴퓨터 내부에서 어떤 동작를 하며, 동작원리를 이해하며 공부해라

 

1장 컴퓨터 시스템으로의 여행

컴퓨터 시스템 → 하드웨어 + 시스템 소프트웨어 → 응용프로그램 실행

 

1.1 정보는 비트와 컨텍스트로 이루어진다.

 

텍스트 문자 → 아스키(각 문자를 바이트 길이의 정수 값으로 나타냄)

아스키 문자파일: 텍스트 파일

이외 파일: 바이너리(2진법) 파일

 

1.2 프로그램은 다른 프로그램에 의해 다른 형태로 변역된다

 

hello.c -(프로그램)→저급 기계어 명령(인스트럭션) → 실행가능 목적 프로그램(실행 가능 목적 파일) → 바이너리 디스크 파일

 

컴파일러 시스템을 구성하는 프로그램: 전처리기, 컴파일러, 어셈블러, 링커

 

전처리 단계: 전처리기(cpp)는 #로 시작하는 명령에 따라 수정. ex) #include<stdio.h>는 전처리기에게 시스템 헤더 파일인 stdio.h를 프로그램 문장에 직접 삽입하라고 지시. 그 결과 ___.i로 끝나는 C 프로그램 생성

 

컴파일 단계: 컴파일러(ccl) hello.i → hello.s( 어셈블리어 프로그램이 저장)

저수준의 기계어 명령어를 텍스트 형태로 나타내고 있다. 어셈블리어는 여러 상위수준 언어의 컴파일러들을 위한공통의 출력 언어 제공 ex) c와 포트란(fortan) 컴파일러는 둘 다 동일한 어셈블리어로 출력 파일을 생성

 

어셈블리 단계: 어셈블러(as)가 hello.s를 기계어 인스트럭션(명령)으로 번역하고, 재배치가능 목적프로그램의 형태로 묶어 hello.c라는 목적파일에 결과를 저장 이 파일은 main 함수의 인스트럭션들을 인코딩 하기 위한 17바이트를 포함하는 바이너리 파일이다.

 

링크단계: C컴파일러에서 제공하는 표준 C 라이브러리에 들어있는 printf 함수를 호출

printf함수는 이미 컴파일된 별도의 목적파일인 printf.o에 들어 있고, 이 파일은 hello.o 파일과 어떤 형태로든 결합되어야 한다. 링커 프로그램(ld)이 이 통합작업을 수행 hello 파일은 실강하는 목적파일(실행파일)로 메모리에 적재되어 시스템에 의해 실행

 

 

1.3 컴파일 시스템이 어떻게 동작하는지 이해하는 것은 중요하다

 

프로그램 성능 최적화하기

링크에러 이해하기

가장 당혹스러운 에러중 하나는 링커의 동작과 관련되어 있고, 큰 규모의 소프트웨어 시스템을 빌드하려는 경우에 발생한다.

  • 링커가 참조를 풀어낼 수 없다는 무엇을 의미하는가?
  • 정적변수와 전역변수의 차이는 무엇인가?
  • ... 등 여러 문제들이 있음 (7장)에서 배우게 된다

보안 약점 피하기

버퍼 오버플로우 취약성은 인터넷과 네트워크상의 보안 약점의 주요 원인으로 설명됬다. 이 취약성은 프로그래머들이 신로할 수 없는 곳에서 획득한 데이터의 양과 형태를 주의 깊게 제한해야한 필요를 인식하지 못해 생겨난다. 안전한 프로그래밍을 배우는 첫 단계는 프로그램 스택에 데이터와 제어 정보가 저장되는 방식 때문에 생겨나는 영향을 이해하는 것이다

 

 

1.4 프로세서는 메모리에 저장된 인스트럭션을 읽고 해석한다

 

hello.c → 실행가능한 목적파일로 번역되어 디스크에 저장되었다. 실행파일을 유닉스 시스템에서 실행하기 위해 shell(응용프로그램)에 입력한다.

 

쉘은 커맨드라인 인터프리터로 프롬프트를 출력하고 명령어 라인을 입력받아 명령을 실행한다.

 

1.4.1 시스템하드웨어 조직

프로그램 실행을 설명하기 위해서는 하드웨어 조직의 이해가 필요

버스

  • 시스템 내를 관통하는 전기적 배선군
  • 컴포넌트들 간에 바이트 정보들을 전송
  • 워드라는고정 크기의 바이트 단위로 데이터들을 전송하도록 설계
  • 한 개의 워드를 구성하는 바이트 수는 시스템마다 보유하는 기본 시스템 변수
  • 대부분의 컴퓨터들은 32비트(4바이트) 64비트(8바이트) 워드 크기를 가짐

입출력 장치

  • 시스템과 외부세계와의 연결을 담당

처음에 실행가능 파일인 hello프로그램은 디스크에 저장되어 있다. 각 입출력 장치는 입출력 버스와 컨트롤러 or 어댑터를 통해 연결. 이 두 장치의 차이는 패키징에 있다. 컨트롤러는 디바이스 자체가 칩셋이거나 시스템의 인쇄기판에 장착. 어댑터는 마더보드의 슬롯에 장착되는 카드. 이들의 목적은 입출력 버스와 입출력 장치들 간에 정보를 주고받도록 해주는 일

 

메인 메모리

  • 프로세서가 프로그램을 실행하는 동안 데이터와 프로그램 모두 저장하는 임시 저장장치
  • 물리적: 메인메모리는 DRAM 칩들로 구성되어 있음
  • 논리적: 메모리는 연속적인 바이트들의 배열, 각각 0 부터 시작해서 고유의 주소(배열의 인덱스)를 가지고 있다.
  • 일반적으로 한 개의 프로그램을 구성하는 각 기계어 인스트럭션은 다양한 바이트 크기를 갖는다
  • C프로그램 변수들의 데이터 크기는 데이터 형에 따라 다름

프로세서

  • CPU 또는 메인 메모리에 저장된 인스트럭션들을 해독(실행)하는 엔진
  • 프로세서의 중심에는 워드 크기의 저장장치(or 레지스터)인 프로그램 카운터(PC)가 있음
  • 시스템에 전원이 공급되는 순간부터 전원이 끊어질 때까지 프로세서는 프로그램 카운터가 가리키는 곳의 인스트럭션을 반복적으로 실행하고 PC값이 다음 인스트럭션의 위치를 가리키도록 업데이트 함
  • 프로세서는 자신의 인스트럭션 집합 구조(instruction architerture)로 정의되는 매우 단순한 인스트럭션 실행 모델을 따라 작동하는 것 처럼 보임
  • 이 모델에서 인스트럭션들은 규칙적인 순서로 실행, 한개의 인스트럭션을 실행하는 것은 여러 단계를 수행함으로 이루어짐
  • 프로세서는 PC가 가리키는 메모리로부터 인스트럭션을 읽어오고, 이 인스트럭션에서 비트들을 해석하여 인스트럭션이 지정하는 간단한 동작을 실행, PC를 다음 인스트럭션 위치로 업데이트. 새로운 위치는 방금 수행한 인스트럭션과 메모리 상에서 연속적일 수도 있고, 그렇지 않을 수도 있다
  • 이들은 메인 메모리, 레지스터 파일, 수식/논리 처리기(ALU) 주위를 순회
  • 레지스터 파일은 각각 고유의 이름을 갖은 워드 크기의 레지스터 집합으로 구성되어 있다. ALU는 새 데이터와 주소 값을 계산

ex) 인스트럭션의 요청에 의해 cpu가 실행되는 작업

 

적재(Load): 메인 메모리에서 레지스터에 한 바이트 또는 워드를 이전 값에 덮어쓰는 방식으로 복사

저장(Store):레지스터에서 메인 메모리로 한 바이트 또는 워드를 이전 값을 덮어쓰는 방식으로 복사

작업(Operate): 두 레지스터의 값을 ALU로 복사하고 두 개의 워드로 수식연산을 수행한 뒤, 결과를 덮어쓰기 방식으로 레지스터에 저장

점프(Jump): 인스트럭션 자신으로부터 한개의 워드를 추출하고, 이것을 pc에 덯어쓰기 방식으로 복사

 

 

1-5 캐시가 중요하다

 

시스템이 정보를 한 곳에서 다른곳으로 이동시키는 일에 많은 시간을 보냄

하드디스크(기계어 인스트럭션) →메인메모리(인스트럭션)

여러 복사과정들이 실제 작업을 느리게함

큰 저장장치는 작은 저장장치들보다 느림

 

레지스터 파일: 수백 바이트, 메인메모리: 10억개 바이트 // 레지스터 파일이 100배 더 빨리 읽을 수 있다

 

프로세서-메모리 간 격차에 대으하기 위해 작고 빠른 캐시(캐시 메모리)라는 저장장치를 고안해 프로세서가 단기간에 필요할 가능성이 높은 정보를 임시로 저장할 목적으로 사용

 

L1: 수 천 바이트, 레지스터 파일만큼 빠른 속도로 액세스 L2: 수백 킬로바이트, 수메가 바이트, 프로세서와 전용 버스를 통해 연결, L1 보다는 5배 느리지만 메인메모리보다는 5배 빠름 L3도 하위에 있음

 

L1,L2: SRAM이라는 하드웨어 기술 사용

 

캐시메모리를 활용하는 응용프로그래머는 캐시를 활용해 자신의 프로그램 성능을 10배 이상 개선할 수 있다

 

 

1.6 저장장치들은 계층구조를 이룬다

 

1.7 운영체제는 하드웨어를 관리한다

 

쉘 프로그램이 hello 프로그램을 로드하고 실행했을때, 출력할때, 입력할때 메모리를 직접 엑세스 하지 않는다.

OS가 제공하는 서비스를 활용한다.OS는 하드웨어와 소프트웨어 사이에 위치한 소프트웨어 계층

응용프로그램이 하드웨어를 제어하려면 언제나 운영체제를 통해야 한다

 

os의 목적

  • 제멋대로 동작하는 응용프로그램들이 하드웨어를 잘못 사영하는 것을 막기 위해
  • 응용프로그램들이 단순하고 균일한 메커니즘을 사용하여 복잡하고 매우 다른 저수준 하드웨어 장치들을 조작하기 위해

1.7.1 프로세스

hello 같은 프로그램이 실행될 때 OS는 시스템에서 한개의 프로그램만 실행되는 것 같은 착각에 빠지게함

프로그램이 프로세서, 메인메모리, 입출력장치를 모두 독차지하고 있는 것처럼 보임

프로세서는 프로그램 내의 인스트록션들을 다른 방해 없이 순차적으로 실행하는 것처럼 보임

 

프로세스란?

실행 중인 프로그램에 대한 운영체제의 추상화

다수의 프로세스들은 동일한 시스템에서 동시에 실행될 수 있으며, 각 프로세스는 하드웨어를 바타적으로 사용하는 것 처럼 느낌

mostly CPU < PROCESS → 문맥전환(context switching) → 교차실행

1.7.2 쓰레드(Thread)

프로세스가 한 개의 제어흐름을 갖는 것이 아니라 최근의 시스템에서는 프로세스가실제로 쓰레드라고 하는 다수의 실행 유닛으로 구성되어 있음

각각의 쓰레드는 해당 프로세스의 컨텍스트에서 실행되며 동일한 코드와 전역 데이트럴 공유

쓰레드의 중요성이 높아지고 있음

다수의 프로세스들에서보다 데이터의 공유가 더 쉽고 쓰레드가 프로세스보다 더 효율적이다

다중 쓰레딩도 다중 프로세서를 활용할 수 있다면 프로그램의 실행속도를 빠르게 하는 한 가지 방법

1.7.3가상메모리(Virtual Memory)

각 프로세스들이 메인 메모리 전체를 독점적으로 사용하고 있는 것 같은 확상을 제공하는 추상화

각 프로세스는 가상주소 공간이라고 하는 균일한 메모리의 모습을 갖는다

  • 프로그램 코드와 데이터:
  • 힙(Heap):
  • 공유 라이브러리:
  • 스택(stack):
  • 커널 가상메모리:

 

1.7.4 파일

연속된 바이트들

입출력 파일 (디스크, 키보드, 디스플레이, 네트워크) → 파일로 모델링

시스템의 모든 입출력은 유닉스 I/O 라는 시스템 콜들을 이용하여 파일을 읽고 쓰는 형태로 이루어진다.

 

 

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

네트워크는 또하나의 입출력 장치로 볼 수 있다

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

 

 

1.9 중요한 주제들

 

시스템은 응용프로그램 실행을 위해 하드웨어와 시스템 소프트웨어가 서로 연결된 것을 말한다.

 

1.10 요약

 

컴퓨터 시스템은 응용프로그램을 실행하기 위해 함께 동작하는 하드웨어와 시스템 소프트웨어로 구성

컴퓨터 내의 정보는 상황에 따라 다르게 해석되는 비트들의 그룹으로 표시

프로그램은 아스키문자로 시작해서 컴파일러와 링커에 의해 바이너리 실행파일들로 번역되는 방식으로, 다른 프로그램들에 의해 다른 형태로 번역

프로세서는 메인 메모리에 저장된 바이너리 인스트럭션을 읽고 해석

컴퓨터가 대부분의 시간을 메모리, 입출력장치, CPU 레지스터 간에 데이터를 복사하는데 사용

→ 시스템의 저장장치들은 계층구조를 형성

계층 구조의 상부에 위치한 저장장치들은 하부의 장치들 보다 비트당 단가가 더 비싸고, 더 빠름

계층 구조 상부의 저장장치들은 하부의 장치들을 위한 캐시 역할

OS 커널은 응용프로그램과 하드웨어 사이에서 중간자 역할

운영체제의 세가지 근본적인 추상화

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

네트워크는 컴퓨터 시스템이 서로 통신할 수 있는 방법을 제공

→ 특정 시스템의 관점으로 볼 때 네트워크는 또 하나의 입출력 장치

 

반응형