TIL 1/20 (2/2)

김주민·2024년 1월 20일

csapp

목록 보기
4/8

csapp 까지 쓰려니까 너무 길어서 자름


1.5 캐시가 중요하다

  • 시스템이 정보를 이동시키는 데 시간 소모가 큼
    --> 복사과정을 가능ㅇ한 빠르게 동작하게 하자
  • 프로세서 - 메모리 간의 격차가 계속 커짐
    -- 보다 작고 빠른 캐시 메모리(캐시)라고 부르는 저장 장치를 고안하여
    -- 프로세서가 단기간에 필요로 할 가능성이 높은 정보를 임시로 저장할 목적으로 사용

캐시(캐시 메모리)

  • 속도차에 따른 병목 현상을 줄이기 위한 범용 메모리. CPU에 사용됨
    L1, L2, L3 (level) 캐시메모리, 속도와 크기에 따라 분류함
    L1 캐시는 주로 CPU칩 안에 내장 데이터 사용/참조에 가장 먼저 사용
    L1 캐시에서 찾지 못하면 L2 캐시 메모리로 넘어감.
    L2 캐시는 용도와 역할은 L1과 비슷하나 속도는 느림(RAM 보다는 빠름), 용량도 더 큼.
    CPU 회로판에 별도의 칩으로 내장.

L1, L2 캐시는 SRAM(Static Random Access Memory)이라는 하드웨어 기술로 구현

idea : 지역성(locality)을 활용하여 시스템이 매우 크고 빠른 메모리 효과를 얻음.
-- 지역성 : 프로그램이 지엽적인 영역의 코드와 데이터를 액세스하는 경향

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

주요 idea : 한 레벨의 저장장치가 다음 하위 레벨 저장 장치의 캐시 역할을 한다
ex ) L1, L2의 캐시 -> L2, L3 의 캐시, L3의 캐시 -> 메인 메모리의 캐시

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

  • hello.c 처럼 프로그램이 키보드, 디스플레이 같은 하드웨어를 제어하지 않음 -> 운영체제(Operation Systemp)가 제공하는 서비스 활용

  • 운영체제 : soft ware와 hard ware 사이에 위치한 소프트웨어 계층

운영체제의 목적
1. 제 멋대로 동작하는 응용프로그램들이 하드웨어를 잘못 사용하지 못하게 함.
2. 응용프로그램들이 단순하고 균일한 매커니즘을 사용하여 복잡하고 매우 다른 저수준 하드웨어 장치들을 조작할 수 있도록 함.

  • 추상화(Abstraction) : 정의하고자 하는 대상의 디테일한 특성을 숨기고, 주요 특징으로 대상을 정의

1.7.1 프로세스

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

  • 다수의 프로세스들을 동일한 시스템에서 동시에(Concurrent) 실행가능
    -- 한 프로세스의 인스트럭션들이 다른 프로세스의 인스트럭션들과 섞임.
    -- 멀티코어 프로세서 : 여러 개의 프로그램을 동시에 실행 가능( -> 프로세서가 프로세스들을 바꿔주는 방식)

  • 운영체제의 문맥전환(Context switching)

-- 프로세서의 교차 실행을 수행
: 운영체제는 프로세스 실행에 필요한 모든 상태 정보(Context)의 변화를 추적.

  • Context : PC, 레지스터 파일, 메인 메모리의 현재 값.

단일 프로세서 시스템은 한 개의 프로세스의 코드만을 실행할 수 있다.
운영체제는 현재 프로세스에서 다른 새로운 프로세스로 제어를 옮기려할 때
현재 프로세스의 컨텍스트를 저장하고 새 프로세스의 컨텍스트를 복원 시키는

문맥전환을 실행하여 제어권을 새 프로세스로 넘겨준다.
새 프로세스는 이 전에 중단했던 바로 그 위치부터 다시 실행.

-> 두 개의 동시성(concument)프로세스 존재

  1. 쉘 프로세스가 명령받음

  2. 쉘이 시스템 콜(특수함수)을 호출하여 운영체제로 제어권 넘김

  3. 운여체제는 쉘의 컨텍스트 저장 후 새로운 프로세스와 컨텍스트 생성 후 제어권을 새 프로세스에 넘겨줌.

    이 때 프로세스의 전환을 운영체제 커널(Kernel)에 의해 관리

  • 커널 : 운영체제 코드의 일부분. 메모리에 상주한다. 모든 프로세스의 관리를 위해 시스템이 이용하는 코드와 자료 구조의 집합.
    프로그램이 요청 -> 컴퓨터는 시스템 콜을 실행하여 커널에 제어권 넘김 -> 커널은 작업 수행 후 응용 프로그램으로 리턴

1.7.2 쓰레드(Thread)

  • 프로세스를 구성하는 다수의 실행 유닛
  • 각각의 쓰레드는 해당 프로세스의 컨텍스트에서 실행되며 동일한 코드와 전역 데이터를 공유.
  • 다수의 프로세스들에서보다 데이터의 공유가 더 쉬움 & 프로세스보다 효율적

1.7.3 가상메모리

  • 각 프로세스들이 메인 메모리 전체를 독점적으로 사용하고 있을 것 같게 하는 추상화
  • 각 프로세스는 가상 주소 공간이라는 균일한 메모리의 모습을 가짐.

-- 리눅스에서 주소 공간의 최상위 영역은 모든 프로세스들이 공통으로 사용하는 운영체제의 코드와 데이터를 위한 공간.
-- 위쪽으로 올라갈 수록 주소가 증가.

  • 프로그램 코드와 데이터
    코드는 모든 프로세스들이 같은 고정 주소에서 시작 -> 이 후 C 전역 변수에 대응되는 데이터 위치들이 따라옴. 실행 가능 목적 파일인 hello로부터 직접 초기화.

  • 힙 Heap
    이후 런타임 힙이 따라옴. 프로세스가 실행되며 C 표준함수인 malloc이나 free를 호출하여 런타임에 동적으로 크기가 변한다.

  • 공유 라이브러리
    주소 공간 중간 부근에 C 표준 라이브러리나 수학 라이브러리와 같은 공유 라이브러리의 코드와 데이터를 저장하는 영역

  • 스택 Stack
    사용자 가상 메모리 공간의 맨위에 컴파일러가 함수 호출을 구현하기 위해 사용하는 사용자 스택이 위치.
    힙과 마찬가지로 동적으로 크기가 변함. 함수 호출 시엔 커지고 리턴시에 작아진다.

  • 커널 가상 메모리
    주소 공간의 맨 윗부분. 응용프로그램들은 이 영역의 내용을 읽거나 쓰는 것이 금지된다.
    커널 코드 내에 정의된 함수를 직접 호출하는 것도 금지됨.
    대신 이러한 작업 수행을 위해선 커널을 직접 호출해야한다.

    1.7.4 파일

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

  • 시스템의 모든 입출력을 유닉스 I/O라는 시스템 콜들을 이용해 파일은 읽고 쓰는 형태로 이뤄짐

  • 응용 프로그램에 시스템에 들어 있는 여러 입출력 장치들에 통일된 관점 제공
    디스크 타일 내용 조작에 사용하고 있는 특정 디스크 기술에 대해서 몰라도 됨.

0개의 댓글