책/CSAPP

CSAPP 1.7 - 1완

에린_1 2024. 1. 20. 20:29
728x90

CSAPP 1.7 - 1끝

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

운영체제는 하드웨어와 소프트웨어 사이 소프트웨어 계층.

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

운영체제의 2가지 목적

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

이러한 두 가지 목적을 추상화를 통해 달성한다.

추상화에 대해서 여러가지 글들을 봤는데, 그것들이 가져야 할 핵심적인 특징을 가지는 모델을 만드는 것, 어떤 복잡한 것들을 단순화 시켜 표현한 것. 이런 설명들이 많았다.

프로세스

프로그램이 최신 시스템에서 실행될 때 운영체제는 시스템에서 이 한 개의 프로그램만 실행되는 것 같은 착각에 빠지도록 해준다.

이 착각이 전산학에서 가장 중요한 개념인 프로세스에 의해 만들어진다.

프로세스는 실행 중인 프로그램에 대한 운영체제의 추상화이다.

운영체제는 문맥전환(Context Switching) 을 사용해 교차실행을 수행한다.

운영체제는 프로세스가 실행 하는데, 필요한 모든 상태정보의 변화를 추적한다.

이 컨텍스트라고 부르는 상태정보는 PC, 레지스터 파일, 메인 메모리의 현재값을 포함.

운영체제는 현재 프로세스에서 다른 새로운 프로세스로 제어를 옮기려고 할때 현재 프로세스의 컨텍스트를 저장하고 새 프로세스의 컨텍스트를 복원시키는 문맥전환을 실행하여 제어권을 새 프로세스로 넘겨준다. 새 프로세스는 이전에 중단했던 바로 그 위치부터 다시 실행된다.

하나의 프로세스에서 다른 프로세스로의 전환은 운영체제 커널Kernel에 의해 관리된다.

커널은 운영체제 코드의 일부분으로 메모리에 상주한다.

응용프로그램이 운영체제에 작업을 요청하면 컴퓨터는 특정 시스템 콜을 실행해서 커널에 제어를 넘겨준다. 그러면 커널은 요청된 작업을 수행하고 응용프로그램으로 리턴한다.

커널은 별도의 프로세스가 아니라는 점에 유의해야 한다.

커널은 모든 프로세스를 관리하기 위해 시스템이 이용하는 코드와 자료구조의 집합이다.

쓰레드(Thread)

프로세스가 마치 한개의 제어흐름을 가지고 있는 것으로 생각할 수 있지만, 시스템에서는 프로세스가 쓰레드라고 하는 다수의 실행 유닛으로 구성되어 있다.

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

점점 중요성이 커지고 있는데, 다수의 프로세스들에서보다 데이터 공유가 쉽다는 점과 쓰레드가 프로세스보다 더 효율적이라는 점 때문이다.

  • context switching시에 overhead 때문에 → cache memory 초기화 등 무거운 작업
    • 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간

가상메모리(Virtual memory)

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

각 프로세스들은 가상주소공간이라는 균일한 메모리의 모습을 가지게 된다.

  • 프로그램 코드, 데이터 - 코드는 모든 프로세서들이 같은 주소에서 시작. 다음 C전역변수에 대응되는 데이터 위치들이 따라온다. 코드와 데이터 영역은 .O 목적 파일에서 직접 초기화
  • 힙(heap) - 런타임 프로세스가 실행되면서 런타임에 동적으로 크기가 줄었다가 늘었다가 한다.
  • 공유 라이브러리 - 주소공간 중간 부근에 C표준 라이브러리나 수학 라이브러리와 같은 코드와 데이터를 저장하는 영역
  • 스택(stack) - 사용자 가상 메모리 맨 위 컴파일러가 함수 호출을 구현하기 위해 사용하는 사용자 스택 힙과 마찬가지로 동적으로 늘어났다 줄어들었다 한다. 특히, 함수를 호출할 때 스택이 커지고 함수에서 리턴 될 때는 줄어든다.
    • 책에 안 나와서 여러 사이트를 뒤져가면서 찾았다. 현재 활성화 된 함수에 로컬로 고정된 길이의 변수를 저장하는데 자주 사용한다. 프로그래머가 명시적으로 스택을 사용하여 가변길이의 로컬데이터를 저장하도록 선택할 수 있다. Stack-Based Memory Allocation(SBMA)
    • 힙에 비해서 훨씬 빠르고, 메모리 자동 회수가능하다, 작아서 스택오버플로우 충돌이 가능하다.
  • 커널 가상메모리 - 주소 공간의 맨 윗부분은 커널을 위해 예약되어있다. 응용프로그램은 이 영역을 읽거나 쓰는것이 금지되어있다.

시스템 네트워크

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

Amdahl’s law

  • 시스템의 주요 부분에 실질적인 개선을 해도, 총 속도 향상은 매우 적다.

동시성 - 다수 동시에 실행되는 시스템

병렬성 - 동시성을 활용해 시스템을 보다 빠르게 동작 시킬 때

쓰레드 수준 동시성

단일 프로세서 시스템 - 실질적인 계산은 한 개의 프로세서에 의해 진행.

멀티 프로세서 시스템 - 시스템이 여러개의 프로세서를 가지고 하나의 운영체제 커널의 제어하에 동작하는 경우

멀티쓰레딩,하이퍼 쓰레딩 - 하나의 CPU가 여러개의 제어 흐름을 실행할 수 있게 해주는 기술

하이퍼쓰레딩으로 시스템 성능 두가지 방법으로 개선

  1. 다수의 태스크를 실행할 때, 동시성을 시뮬레이션 할 필요를 줄여준다.
  2. 멀티프로세싱으로 한개의 응용프로그램을 빠르게 실행할 수 있지만, 프로그램이 병렬로 고효율적으로 실행할 수 있는 멀티쓰레드 형태로 표현됐을때만 가능하다.
728x90

' > CSAPP' 카테고리의 다른 글

CSAPP 3.6.5 - 3.7  (1) 2024.01.22
CSAPP 3.5 - 3.6.4  (0) 2024.01.20
CSAPP 3.4  (0) 2024.01.20
CSAPP 3.1 - 3.3  (0) 2024.01.20
CSAPP 1.1 - 1.6  (0) 2024.01.20