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

2025. 7. 12. 22:43·Develop

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

  • 대표적으로 ASCII 코드는 각 바이트 숫자에 대응하는 문자가 존재한다.
    • 'i' = 105
  • 1byte 는 256개의 다른 값 표현이 가능하고, ASCII CODE는 128개를 사용한다.

1-2. 프로그램은 다른 프로그램에 의해 다른 형태로 번역된다.

왜 다른 형태로 변해야 할까?

인간이 이해할 수 있는 프로그램은 소스파일에서 하드웨어가 이해할 수 있는 기계어 가 되어야 한다. 이 과정을 컴파일 이라고 하고, 4개의 과정이 존재한다.

  1. 전처리 (Preprocessing):
  2. 소스 코드에 포함된 매크로, 헤더 파일 등을 처리하여 컴파일러가 처리하기 쉬운 형태로 만듭니다.
  3. 컴파일 (Compilation):
  4. 전처리된 코드를 분석하여 어셈블리 코드로 변환합니다. 이때 문법 오류 및 의미 분석 등을 수행합니다.
  5. 어셈블 (Assembly):
  6. 어셈블리 코드를 기계어 코드로 변환합니다.
  7. 링킹 (Linking):
  8. 여러 개의 목적 파일을 합쳐 실행 가능한 하나의 파일을 만듭니다. 이때 라이브러리 파일도 함께 연결됩니다.

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

프로그램 성능 최적화하기

컴파일러의 내부동작을 알 필요는 없다. 다만
c문장을 기계어로 번역하는 과정에서 어떤 일이 일어나는지에 대해선 알아야 한다.
(ex- switch, if~else 중 어느 것이 효율적일까?..)

링크 에러 이해하기

링커에 대한 에러는 실행하기 전까진 나타나지 않는다
(그 이유는 7장)

변수가 겹치면? 지역변수 전역변수의 혼동 등이 이에 해당한다.

보안약점 피하기

1-4. 프로세서는 메모리에 저장된 인스트럭션을 읽고 해선한다.

hello.c 파일은 컴파일 과정을 거쳐 실행가능한 목적파일로 디스크에 저장된다.
유닉스 시스템은 실행하기위해서 쉘 이라는 응용프로그램에 이름을 입력한다.

1-4-1. 시스템의 하드웨어 조직

  • 버스
    • 전기적 배선군. 워드라고 하는 고정 크기 바이트 단위로 데이터 전송
    • 현재는 4바이트 또는 8바이트
  • 입출력 장치
    • 입출력 버스와 입출력 장치들 간에 정보를 주고받도록 해주는 장치
  • 메인 메모리
    • 프로세서가 프로그램을 실행하는 동안 데이터와 프로그램을 모두 저장하는 임시 저장 장치다.
  • 프로세서
    • 메모리에 저장된 인스트럭션들을 해독하는 엔진이다.

1-4-2. hello 프로그램 실행

  • 직접메모리접근으로 디스크에서 바로 메인메모리에 적재

1-5. 캐시가 중요하다.

  • 시스템이 정보를 한 곳에서 다른 곳으로 옮기는데에 코스트를 많이 사용한다.
  • 메모리가 레지스터처럼 빨라질 순 없다.
  • 그래서 등장한 것이 캐시! L1, L2 캐시가 존재한다
  • 캐시를 이용하는 것이 매우중요
    캐시를 구현하는 방식SRAM이라는 하드웨어 기술을 이용

1-6. 저장장치들은 계층구조를 이룬다.

메모리 계층의 중요한점은
한 레벨의 저장장치가 다른 하위레벨의 캐시 역할을 한다는 것.

1-7. 운영체제는 하드웨어를 관리한다.

  • 운영체제는 제멋대로 동작하는 응용프로그램들이 하드웨어를 잘못 사용하는 것 을 막기위해
  • 응용프로그램들이 단순하고 균일한 매커니즘을 사용항 복잡하고 매우다른 저수준 하드웨어장치들을 조작할 수 있도록 하기위해1-7-1. 프로세스프로세스는 실행중인 프로그램에 대한 운영체제의 추상화다.
    cpu의 _context switch_가 다수의 프로세스를 동시에 실행하는 것처럼 보이게 한다.

두개의 프로세스
쉘과 hello 목적파일이 있다고 했을 때,

  1. 쉘은 실행명령을 받으면 시스템 콜이라는 특수함수를 호출해
    운영체제로 제어권을 넘긴다.
  2. 이 때 운영체제는 쉘의 컨텍스트를 저장하고, hello의 새 프로세스와 컨텍스트를 생성한 후 제어권을 넘긴다.
  3. 프로세스가 끝이나면 쉘 프로세스 컨텍스트를 복구시킨다.

프로세스간 전환은 운영체제의 커널이 담당한다
커널은 메모리에 항시 상주한다.

1-7-2. 쓰레드

쓰레드는 한 프로세스 안에서 실행되는 다수의 실행 유닛이다.
쓰레드 간 데이터 공유가 프로세스보다 쉽다.

1-7-3. 가상메모리

가상 메모리는 프로세스가 메인메모리를 독점하는 것처럼 보이게 하는 추상화이다.

Why..?

메모리 보호와 격리

메모리 효율성 실제 물리 메모리보다 더 큰 프로그램도 실행할 수 있어요. 필요한 부분만 실제 메모리에 올리고, 나머지는 디스크에 저장해두다가 필요할 때 불러오는 방식이죠. 여러 프로세스가 동시에 돌아도 각각 필요한 부분만 메모리에 올려서 효율적으로 사용할 수 있어요.

프로그래밍 편의성 프로그래머가 물리적인 메모리 주소를 신경 쓸 필요가 없어져요. 항상 0번지부터 시작하는 일관된 주소 공간을 사용할 수 있고, 다른 프로그램이 메모리를 어떻게 사용하는지 몰라도 되죠.

동적 메모리 할당 프로그램이 실행 중에 필요에 따라 메모리를 할당받거나 해제할 수 있어요. 가상 메모리가 이런 작업을 투명하게 관리해주죠.

=> 안정적이고 효율적인 메모리관리!

1-8. 시스템은 네트워크를 통해 다른 시스템과 통신한다.

개별 시스템이라는 관점에서 볼 때, 네트워크는 메모리로부터 네트워크 어댑터로
정보를 복사시키는 (전송) 점에서 또 다른 입출력 장치로 볼 수 있다.

현대의 통신 기술은 네트워크 어댑터를 통한 정보의 복사다

1-9. 중요한 주제들

1-9-1. 암달의 법칙

암달의 법칙 요약:

  • 병렬화의 한계:
    아무리 병렬 처리를 해도 순차적으로 처리해야 하는 부분이 있으면 성능 향상에는 한계가 있습니다.
  • 성능 향상의 제한 요인:x
    프로그램의 순차적인 부분, 즉 병렬화할 수 없는 부분은 병렬 처리 속도 향상을 제한하는 주요 요인입니다.
  • 최대 성능 향상:
    병렬화 비율이 높을수록 성능 향상 효과는 커지지만, 순차적인 부분 때문에 특정 지점 이상으로는 성능 향상이 어려워집니다

1-9-2. 동시성과 병렬성

  • 동시성: 동시에 벌어지는 다수의 일을 갖는 시스템
  • 병렬성: 동시성을 사용해서 시스템을 보다 빠르게 동작하도록 하는 것

쓰레드 수준의 동시성

CPU에서 멀티코어와 멀티쓰레드를 구현해 병렬성을 구현

인스트럭션 수준의 병렬성

이전: 1개의 인스트럭션 3.1개의 사이클 필요
현재: 1개의 사이클에 2.4개의 인스터럭션 사용가능

파이프라인 설계로 구현함.

싱글 인스트럭션, 다중데이터 병렬성(SIMD)

cpu 수준. 하나의 인스트럭션이 많은 데이터를 처리한다.
부동소수점, 영상,소리,동영상데이터 처리를 위한 응용프로그래의 성능을 높이기 위해 사용한다.

1-9-3. 컴퓨터시스템에서 추상화의 중요성

인스트럭션 집합 구조는 실제 프로세서 하드웨어의 추상화를 제공한다.

기계어 프로그램은 마치 한번에 하나의 인스트럭션을 실행하는 프로세서에서 실행되는 것처럼 보인다.

'Develop' 카테고리의 다른 글

싱글링크드리스트  (1) 2025.07.19
정렬의 종류  (0) 2025.07.16
정렬이란??  (0) 2025.07.16
문자열이란 ..  (0) 2025.07.14
배열의 의미, 동작방식, 최적화 등등  (0) 2025.07.13
'Develop' 카테고리의 다른 글
  • 정렬의 종류
  • 정렬이란??
  • 문자열이란 ..
  • 배열의 의미, 동작방식, 최적화 등등
sj-leeee
sj-leeee
배운것과 느낀것을 적는 공간입니다.
  • sj-leeee
    sj-leeee 님의 블로그
    sj-leeee
  • 전체
    오늘
    어제
    • 분류 전체보기 (23)
      • LIFE (5)
      • Develop (17)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

    • 깃허브
    • 이전블로그
  • 공지사항

  • 인기 글

  • 태그

    운영체제
    싱글스레드
    rbtree
    git
    heap
    정글
    Kafka
    크래프톤
    크래프톤정글
    Algorithm
    malloc
    Jungle
    LinkedList
    Pintos
    MQ
    8주차
    컴파일
    AWS
    krafton
    node.js
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
sj-leeee
CS:APP 1장 컴퓨터 시스템으로의 여행
상단으로

티스토리툴바