[CS:APP] 컴퓨터 시스템 1.5 ~ 1.9 Review

@developer/takealittle.time·2024년 9월 19일
1

Reading Book

목록 보기
2/5
post-thumbnail

요점만 간단히.


1.5 캐시가 중요하다.

  • 물리학의 법칙 → 저장장치의 사이즈가 커지면 속도가 느려진다.
    단순하게 생각해도 ~ 큰 저장장치와 작은 저장장치: 어느 저장장치에서 전기신호가 더 빨리 이동할까? → 작은 저장장치

  • 지역성(Locality): 프로그램이 지엽적인 영역의 코드와 데이터를 액세스하는 경향이 있다 → "접근하는 데이터들만 계속 반복해서 접근하더라!"

  • 메인 메모리보다 작은 '캐시 메모리(Cache Memory)'에 자주 쓰는 데이터들을 임시 저장 해놓고 프로그램을 실행할 때 가져다 쓴다.
    "프로세서의 속도가 빨라지더라!"


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

<메모리 계층구조>

  • 그림에서 위로 갈수록 속도가 빠르고, 용량은 적고, 가격은 비싸고, 물리적인 크기는 크다.

  • 한 레벨의 저장장치가 다음 하위레벨 저장장치의 캐시 역할을 한다. (중요)
    ex1.) 찾으려는 데이터 → L2 캐시에서 찾으면 → 메인 메모리에서 안찾아도 됨.
    ex2.) 찾으려는 데이터 → 메인 메모리에서 찾으면 → 하드디스크에서 안찾아도 됨.


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

  • 운영체제(Operating System): 하드웨어와 소프트웨어 사이에 위치한 소프트웨어 계층.

    <사용 목적>

    1. 제멋대로 동작하는 응용프로그램들이 하드웨어를 잘못 사용하는 것을 막기 위해
    2. 응용프로그램들이 단순하고 균일한 매커니즘을 사용해 복잡한 저수준 하드웨어 장치들을 조작할 수 있도록 하기 위해
  • 프로그램 실행 → 운영체제 서비스를 이용해서 → 하드웨어 조작.

1.7.1 프로세스

  • 실행 중인 프로그램에 대한 운영체제의 추상화.
  • 문맥 전환 (Context Switch): 한 프로세스 → 다른 프로세스 옮겨갈 때 현재 프로세스의 컨텍스트 (PC, 레지스터 파일, 메인 메모리의 현재 값 등을 포함한 상태 정보)를 저장하고 옮겨감.
    → 사용자가 동시에 여러 개의 프로그램을 수행 했을 떄 : 이러한 문맥 전환(Context Switch) 기법을 통해 구현이 가능함.
    (동시에 여러 개의 프로그램을 실행하는 것처럼 보이지만, 실상은 굉장히 빠른 속도로 문맥 전환을 하며 프로세스들을 실행하고 있는 것.)
    (ex) Process1에서 Process2로 Context Switch가 일어날 때
    Process1에서 System Call 발생 → 커널을 거쳐 Process2로 Context Switch.
    Process2 에서 요청된 작업 수행 후 다시 System Call 발생 → 커널을 거쳐 Process1으로 Context Switch.

1.7.2 쓰레드 (Thread)

  • 프로그램의 특정한 제어 흐름.
  • 다수의 쓰레드로 구성되기도 함. → 멀티 쓰레드 (Multi Thread): 제어 흐름이 여러개 있는 것.
  • 멀티 쓰레드인 경우, 해당 프로세스의 컨텍스트에서 실행되며 동일한 코드와 전역 데이터를 공유

장점)
1. 다수의 프로세스들에서보다 데이터의 공유가 더 쉽다.
2. 쓰레드가 프로세스보다 더 효율적이다.

  • ex) 그림. 단일 쓰레드와 멀티 쓰레드

1.7.3 가상메모리

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

  • 가상메모리가 작동하기 위해서는 프로세서가 만들어내는 모든 주소를 하드웨어로 번역하는 등의 하드웨어 ↔ 소프트웨어 간 복잡한 상호작용이 필요.

  • 리눅스에서 주소 공간의 최상위 영역은 모든 프로세스들이 공통으로 사용하는 운영체제의 코드와 데이터를 위한 공간. / 하위 영역은 사용자 프로세스의 코드와 데이터를 저장.

1.7.4 파일

  • 파일: 연속된 바이트들.
  • 디스크, 키보드, 디스플레이, 네트워크까지 포함하는 모든 입출력장치는 파일로 모델링.

파일이라는 강력한 추상화 덕에 프로그래머는 특정 디스크에 대한 기술을 몰라도 됨.


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

  • 네트워크는 단지 또 다른 입출력 장치로 볼 수 있다.


1.9 중요한 주제들

  • (시스템 : 하드웨어 ↔ 소프트웨어의 연결) =(목적)=> 응용프로그램의 실행

1.9.1 Amdahl의 법칙

  • 어떤 시스템의 한 부분을 성능 개선 → 전체 시스템 성능은 얼마나 개선될까?
    => 전체 시스템에서 유의미한 성능 개선이 있으려면 매우 큰 부분의 성능 개선이 필요하다.

1.9.2 동시성과 병렬성

  • 동시성: 다수의 일이 동시에 벌어지는 시스템에 관한 일반적인 개념
  • 병렬성: 동시성을 사용해 시스템을 보다 빠르게 동작하도록 하는 개념

  • 단일 프로세서 시스템: 한 개의 프로세서에 의해 실질적 계산 이루어짐.

  • 멀티 프로세서 시스템: 어떤 시스템이 여러 개의 프로세서를 가지고 하나의 운영체제 커널의 제어 하에 동작.

  • 멀티코어 프로세서 시스템: 여러 개의 CPU (코어)가 하나의 칩에 내장.

  • 멀티 쓰레딩(=하이퍼 쓰레딩): 하나의 CPU가 여러 개의 제어 흐름을 실행할 수 있게 해주는 기술 → "멀티 프로세서에서는 프로세서 자체가 여러 개니까, 한 번에 여러 쓰레드를 병렬 처리 할 수도 있겠네?"


  • 멀티 프로세싱의 장점
    1. 다수의 태스크 실행 → 동시성을 시뮬레이션 할 필요 ↓
      "프로세서가 하나면 여러 번 문맥 전환 / 프로세서 자체가 여러 개니까 그냥 병렬 실행 해버리면 되네!"
    2. 한 개의 응용 프로그램 → 멀티 쓰레드 형태로 표현된 경우 병렬 처리를 통해 더 빠르게 실행

  • 인스트럭션 수준 병렬성: 낮은 수준의 추상화 → 여러 개의 인스트럭션 한 번에 실행 가능.

    • 파이프라이닝(Pipelining): 하나의 인스트럭션을 실행하기 위해 요구되는 일들을 여러 개로 나누고 프로세서 하드웨어가 일련의 단계로 구성되어 이들 단계를 하나씩 수행.
    • 슈퍼 스케일러(Super-Scalar): 사이클 당 한 개 이상의 인스트럭션을 수행할 수 있는 프로세서.
  • 싱글 인스트럭션, 다중 데이터 병렬성 (SIMD)
    최신 프로세서들 → SIMD 병렬성 (최하위 수준에서 싱글 인스트럭션, 다중 데이터)라는 모드로 한 개의 인스트럭션이 병렬로 다수의 연산을 수행할 수 있는 특수 하드웨어를 가짐.
    → 대개 영상, 소리, 동영상 데이터 처리를 위한 응용프로그램의 속도 개선 위해 제공.


1.9.3 컴퓨터 시스템에서 추상화의 중요성

추상화는 전산학에서 가장 중요한 개념.

  • 파일: 입출력 장치의 추상화.
  • 가상 메모리: 프로그램 메모리의 추상화.
  • 가상머신: 운영체제, 프로세서, 프로그램 모두를 포함하는 컴퓨터 전체의 추상화.

참고 자료 / 이미지 출처 ::

이미지 참고
https://it-eldorado.tistory.com/50

https://joooing.tistory.com/entry/cs3

https://hongong.hanbit.co.kr/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0%EC%99%80-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EB%A5%BC-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0/

https://blog.naver.com/qbxlvnf11/221356479397?viewType=pc

https://wayhome25.github.io/cs/2017/04/14/cs-15-2/

https://velog.io/@choi-yh/OS-가상-메모리-관리

https://velog.io/@jinu0729/CS-컴퓨터-시스템으로의-여행-ch.-4

profile
능동적으로 사고하고, 성장하기 위한. 🌱

0개의 댓글

관련 채용 정보