TIL - 2024/04/01

박상우·2024년 4월 2일
0

📝 TIL

목록 보기
10/21
post-thumbnail

CSAPP ( ~ 1장 )

1.5 캐시가 중요하다.

시스템이 프로그램을 실행시키는 과정에 있어서 정보를 한 곳에서 다른 곳으로 이동하는 과정이 빈번하게 발생한다는 것을 확인했다.

이는 실제 우리가 프로그램을 통해 실행하려고 하는 동작과는 무관한, 실제 작업의 실행을 방해(?)하는 오버헤드 처럼 느껴진다.

메모리가 클 수록 프로세스가 메모리에서 정보를 읽어오는 시간이 길어지고, 이는 용량이 더 커질수록 더 많은 격차가 벌어진다. 그래서 중간에 캐시 메모리(캐시)라는 임시 저장소를 통해서 단기간에 프로세스가 빠른 속도로 정보를 읽어올 수 있게 하고 있다. 메인 메모리와 캐시만 사용하는 것이 아니라 크기에 따라 다양한 저장소를 L1, L2, L3… 계층식 구조를 이루어 크고 빠른 시스템을 구성할 수 있게 되었다.


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

위에서 말한 대로 메모리는 계층 구조를 이룬다. 메모리 계층구조의 주요한 아이디어는 한 레벨의 저장장치가 다음 저장장치의 캐시 역할을 한다는 것이다.


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

프로그램을 실행할 때, 프로그램이 직접 입출력 장치를 직접 입/출력 장치를 제어하지 않는다. 이는 운영체제를 통해서 하게된다.

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

  • 응용프로그램들이 하드웨어를 직접 제어해서 잘못된 동작을 하는 것을 막기 위해
  • 응용 프로그램들이 일관된 메커니즘을 통해 하드웨어를 사용할 수 있게 하기 위해

프로세스(Processes)

프로세스는 실행 중인 프로그램에 대한 운영체제의 추상화이다. 실제로는 여러 프로그램들이 동시에 실행되고 있지만 각 프로그램들이 배타적으로 동작하는 것처럼 느껴지도록 한다.

단일 프로세스 , 멀티 프로세스 모두 프로세서가 프로세스를 바꾸어주는 방식을 통해서 여러 프로그램이 동시에 배타적으로 수행할 수 있게 된다.

운영체제는 문맥전환(Context Switching)을 통해서 이러한 실행을 가능하게 한다.

운영체제는 프로세스를 실행하는데 필요한 모든 상태정보를 가지고 있다. 실행하고 있는 프로세스에서 다른 프로세스로 제어권을 넘기려고 할 때,현 프로세스의 컨텍스트를 저장하고, 새 프로세스의 컨텍스트를 복원시키는 문맥전환을 통해서 프로세스를 전환한다. 새 프로세스는 이전에 저장된 컨텍스트 정보에 따라 이어서 프로세스를 실행한다.

운영체제에서 발생하는 이런 프로세스 전환은 커널(Kernel)에 의해 관리된다. 이때 커널은 특정한 장치나 프로세스라기 보다 운영체제 내부에 존재하는 코드와 자료구조이다. 응용프로그램이 운영체제에게 특정한 작업을 요청하면 운영체제 내부에서 커널에게 제어를 넘겨주게 된다. 커널은 요청된 사항을 수행하고 다시 응용프로그램에게 리턴해준다.

쓰레드(Thread)

프로세스가 갖는 실제로 실행되는 다수의 실행 유닛을 쓰레드(Thread)라고 한다. 쓰레드는 해당 프로세스의 컨텍스트에 의해서 실행되고 동일한 코드와 전역 데이터를 공유한다. 프로세스들 보다 데이터 공유가 더 쉽다는 점 때문에 쓰레드의 프로그래밍 모델로서의 의미가 더욱 커지고 있다.

가상메모리(Virtual Memory)

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

가상 주소 공간들은 다음과 같은 몇 개의 정의된 영역으로 구성되어있다.

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

파일(Files)

그저 연속된 바이트들이다. 모든 입/출력 장치는 유닉스 I/O라는 시스템 콜을 이용해 파일을 읽고 쓰는 형태로 이루어진다.


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

최신 시스템은 다른 시스템과 연결된다.

네트워크는 컴퓨터끼리 데이터를 주고받는 점에서 다른 입출력 장치와 같다고 볼 수 있다. 데이터는 로컬 디스크대신 네트워크를 통해 다른 컴퓨터로 데이터를 전달하고, 다른 컴퓨터에서는 받은 데이터를 받아 메인 메모리에 복사할 수 있다.


1.9 중요한 주제들

Amdahl의 법칙

Gene Amdahl은 시스템의 일부 성능 개선에 대한 효율성을 직관적으로 관찰한 바 있다. 이 관찰을 Amdahl의 법칙이라고 알려져 있고, 어떤 시스템의 성능을 개선할 때, 전체 시스템에 대한 효과는 그 부분이 얼마나 주요한가, 이 부분이 얼마나 빨라졌는가에 관계가 있다는 아이디어를 내포하고 있다.

Amdahl의 법칙은 시스템의 주요한 부분을 개선했더라도 그 효과는 생각보다 미미하고, 전체적인 성능향상을 위해서는 전체 시스템의 큰 부분을 수정해야한다는 것을 담고 있다.

동시성과 병렬성

동시성(Concurrency)이란 단어는 다수의 동시에 벌어지는 일을 다루는 시스템의 일반적인 개념을 말할 때 사용하며, 병렬성(parrellelism)은 동시성을 통해 시스템을 보다 빠르게 동작하도록 하는 것을 말할 때 사용한다.

  • 스레드 수준의 동시성 쓰레드를 사용하면 한 개의 프로세스 내부에 실행되는 다수의 제어흐름을 가질 수 있다. 한 개의 컴퓨터가 실행하는 프로세스를 빠르게 전환하는 방식을 사용하는데 이것을 통해서 우리가 브라우저를 켜놓고, 문서작업을 할 수 있고, 또 음악을 들을 수 있게 해준다. 이렇게 한 개의 프로세스에서 빠르게 테스크간 전환을 통해서 동시성을 제공하는 시스템을 단일 프로세서 시스템이라고 하고, 여러개의 프로세서를 가지고 하나의 운영체제에서 동작하는 경우를 멀티 프로세서 시스템이라고 한다.
  • 인스트럭션 수준 병렬성 최근의 프로세서들은 훨씬 낮은 수준에서 추상화로 여러 개의 인스트럭션을 한 번에 실행할 수 있다. 이를 인스트럭션 수준 병렬성이라고 한다.
  • 싱글 인스트럭션, 다중 데이터 병렬성 ( SIMD ) 최신 많은 프로세스들은 최하위 수준에서 SIMD 병렬성이라는 모드로 한개의 인스트럭션이 병렬로 다수의 연산을 수행할 수 있는 특수 하드웨어를 가지고 있다. SIMD 인스트럭션들은 영상, 소리, 동영상 데이터 처리를 위한 응용프로그램의 속도를 제어하기 위해 제공된다.

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

컴퓨터 시스템에서는 내부 복잡한 과정을 고려하지 않고 설명하기 위해 추상화를 사용하여 설명하고 있다. 내부 구현을 파악하기 위해서는 다양한 수준의 추상화가 필요하다.

profile
나도 잘하고 싶다..!

0개의 댓글