728x90

1-7. The Operating System Manages the Hardware

  • 운영체제 : 하드웨어와 소프트웨어 사이에 위치한 소프트웨어 계층
  • 응용 프로그램이 하드웨어를 제어하려면 언제나 운영체제를 통해야한다.

 

운영체제의 목적

  1. 응용프로그램들이 하드웨어를 잘못 사용하는 것 방지
  2. 응용프로그램이 저수준의 하드웨어 장치를 효율적으로 조작할 수 있도록 함

 

운영체제의 추상화

  • 운영체제의 목적을 추상화(abstraction)를 통해 달성한다.
    • 파일 : 입출력 장치의 추상화
    • 가상메모리 : 메인 메모리와 디스크 입출력 장치의 추상화
    • 프로세스 : 프로세서, 메인 메모리, 입출력 장치 모두의 추상화 결과

 

💡 운영체제에서의 추상화(Abstraction)?

  • 정의하고자 하는 대상의 디테일, 자세하고 사소한 특징들을 숨기고 주요한 특징을 대상으로 정의하는 것
  • 사용자는 시스템 내에서 복잡한 작업을 거치지 않고도 시스템 콜(system call)을 통해 단순하게 수행할 수 있다.
    • 시스템 콜(System call) : os가 자원들을 사용할 수 있도록 제공하는 일종의 API 개념이라고 생각!

 

 


1-7-1. Process

  • 프로세스
    • 각각 Code, Data, Stack, Heap 의 구조로 되어있는 독립된 메모리 영역을 할당받는다.
    • 각 프로세스는 별도의 주소 공간에서 실행된다.
      • 다른 프로세스의 자원에 접근할 수 없다.
    • 프로세스는 최소 하나 이상의 스레드를 포함한다.

 

  • 운영체제는 사용자로 하여금 시스템에서 한 개의 프로그램만 실행되는 것 같은 착각에 빠지도록 한다.
  • 자원을 모두 독차지 하고 있다고 느낀다.
  • 다수의 프로세스들은 동일한 시스템에서 동시에 실행될 수 있으며, 각 프로세스는 하드웨어를 배타적으로 사용하는 것 처럼 느낀다.

 

 

Context Switching

  • Context : 프로세스가 실행하는 데 필요한 모든 상태 정보
    • 프로세스의 PCB(Process Control Block)에 저장된다.

 

  • 단일 프로세서 시스템은 한 개의 프로세스의 코드만 실행할 수 있으므로, 운영체제는 현재 프로세스에서 다른 새로운 프로세스로 제어를 옮기려고 할 때, 현재 프로세스의 context를 저장하고 새 프로세스의 context 복원을 수행한다. → “Context Switching”
  • Ex. 쉘 프로세스 → hello 프로세스 수행 과정

💡 병행 프로세스 (concurrent process) : 메모리에 다수의 프로세스가 같이 존재한다는 의미

1. 쉘 프로세스 혼자서 동작하다가 명령줄에서 입력을 기다린다.

2. [쉘 프로세스] hello 프로그램을 실행하라는 명령 → 시스템 콜 호출

→ 운영체제로 제어권이 넘어간다.

3. [운영체제] 쉘의 Context 저장 → 새로운 hello 프로세스와 hello Context 생성

hello 프로세스로 제어권이 넘어간다.

4. [hello 프로세스] hello 프로세스 종료

운영체제로 제어권이 넘어간다.

5. [운영체제] 쉘 프로세스의 Context 복구

쉘 프로세스로 제어권이 넘어간다.

 

커널(kernel)

  • 모든 프로세스를 관리하기 위해 시스템이 이용하는 코드와 자료 구조의 집합
  • 하나의 프로세스에서 다른 프로세스로의 전환을 관리한다.
    • 시스템 콜 실행시, 커널에 제어를 넘겨준다.

 

 


1-7-2. Thread

  • 쓰레드(thread)
    • 프로세스 실행의 단위
    • 프로세스는 다수의 실행 단위(쓰레드)로 구성된다.

 

  • 쓰레드의 중요성
    • 데이터의 공유가 더 쉽다.
    • 쓰레드가 프로세스보다 더 효율적이다.

 

  • 프로세스 🆚 쓰레드
    • 실행 중인 프로그램
    • 프로세스의 실행 단위

 


1-7-3. Virtual Memory

  • 각 프로세스들이 메인 메모리 전체를 독점적으로 사용하고 있는 것 같은 환상을 제공하는 추상화
  • ‘가상주소 공간’ 이라는 균일한 메모리 형상을 갖는다.
  • 주소 공간의 하위 영역은 사용자 프로세스의 코드와 데이터를 저장한다.

  • 프로그램 코드와 데이터영역 (Code, Data)
    • 모든 프로세스들이 같은 고정 주소에서 시작
    • 컴파일 타임에 크기 결정

 

  • 힙(Heap)
    • 런타임 힙
    • 프로세스가 실행되면서 런타임에 동적으로 할당

 

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

 

  • 스택(Stack)
    • 컴파일러가 함수 호출을 구현하기 위해 사용하는 사용자 스택

 

  • 커널 가상메모리
    • 주소공간의 맨 윗 부분은 커널을 위해 예약되어 있음
    • 커널 코드 내에 정의된 함수를 직접 호출하는 것도 금지되어 있음

 

 


1-7-4. Files

  • Unix I/O 라는 시스템 콜이용해서 파일을 읽고 쓰는 형태
  • 응용 프로그램에 시스템에 들어 있는 다양한 입출력장치들의 통일된 관점 제공

 

 


1-8. Systems Communicate with Other Systems Using Networks

  • 네트워크 : 또 다른 입출력 장치
  • 시스템은 다른 컴퓨터로부터 받은 데이터를 읽어서 메인 메모리에 복사
  • telnet 응용을 사용

 

💡 telnet : 인터넷이나 로컬 영역 네트워크 연결에 쓰이는 네트워크 프로토콜

 

  1. “hello” 스트링을 telnet 클라이언트에 입력하고 엔터 키를 누른다.
  2. 클라이언트 프로그램은 이 스트링을 telnet 서버로 보낸다.
  3. telnet 서버가 네트워크에서 스트링을 받은 후에 원격 쉘 프로그램에 이들을 전달한다.
  4. 다음으로 원격 쉘은 hello 프로그램을 실행하고 출력을 다시 telnet 서버로 전달한다.
  5. telnet 서버는 네트워크를 거쳐 울력 스트링을 telnet 클라이언트로 전달하고 클라이언트 프로그램은 출력 스트링을 자신의 로컬 터미널에 표시한다.

 

 


1-9. Important Themes

 

1-9-1. Amdahi’s Law

  • 컴퓨터 프로그램 같은 프로세스의 성능 향상에 대한 정보를 제공

 

💡 암달의 법칙에서 Performance?

  • 프로세스 완료까지의 소요 시간

 

Example

  • $f$ : 전체 시스템 시간에서 개선된 부분이 차지하고 있는 시간의 비율
  • $S$ : 성능 향상 배수

 

$$
S_{latency} = {1\over (1-f) + {f\over s}}
$$

 

만약 초기에는 전체 시간의 60%($f = 0.6$) 만 소모한 시스템의 일부분이 3배 속도($S = 3$)가 빨라졌다고 한다면 속도향상($S_{latency}$)은 1.67을 얻는다.

 

⭐ 시스템의 주요 부분에 대해 실질적인 개선을 했지만 총 속도 향상은 매우 적다.

→ Amdahi의 법칙의 주요 맹점

 

 

병렬 처리에서의 Amdahi 법칙

병렬 컴퓨팅에서 멀티 프로세서를 사용할 때 프로그램의 성능향상은 프로그램의 순차적인 부분에 의해 제한된다. 예를 들면, 프로그램의 95%가 병렬화 할 수 있다면 이론적인 최대 성능 향상은 아무리 많은 프로세서를 사용하더라도 최대 20배로 제한된다.

 

 

Amdahi의 법칙의 시사점

  • 아무리 최적화를 하더라도 이 최적화로부터 영향을 받지 않는 다른 부분으로 그 효과는 제한적일 수 있다.
  • 프로그래머가 프로그램의 성능을 개선할 때 헛된 곳에 시간을 낭비하지 말고 가장 많은 시간이 소요되는 곳에 집중해야함
  • Make the common case fast : 자주 생기는 일을 단순화하여 성능을 개선하기 쉬운 경우가 많다.

 

  • 상대성능 표현하기좋은 방법

$T_{old} / T_{new}$

  • $T_{old}$ : 원본 프로그램에서의 요구 시간
  • $T_{new}$ : 개선된 프로그램에서의 요구 시간

⭐ 현재에 비교해서 나타내는 게 더 낫다!

 

 


1-9-2. Concurrency and Parallelism

  • 동시성(Concurrency)
    • 다수의 동시에 벌어지는 일을 갖는 시스템
    • ‘Context Switching’ 프로세서 하나가 여러 작업을 돌아가며 일부분씩 수행하는 방식

 

  • 병렬성(Parallelism)
    • 동시성을 사용해서 시스템을 보다 빠르게 동작하도록 하는 것
    • 프로세서 하나에 코어 여러개가 달려서 각각을 동시에 작업하는 방식

 

Thread-Level Concurrency

  • 쓰레드를 이용하면 한 개의 프로세스 내에서 실행되는 다수의 제어흐름을 가질 수도 있다.
  • 시간공유(time-sharing)
    • 한 개의 컴퓨터가 실행하는 프로세스를 빠르게 전환하는 방법을 사용

 

  • 다수의 사용자들이 시스템과 동시에 교신할 수 있음
  • 한 명의 사용자가 다수의 태스크에 동시에 연관될 수 있게 함

 

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

 

  • 하이퍼쓰레딩(=멀티쓰레딩)
    • 하나의 CPU가 여러 개의 제어 흐름을 실행할 수 있게 해주는 기술
    • 프로그램 카운터나 레지스터 파일 같은 여러 개의 동일한 CPU 하드웨어를 가짐
    • 부동소수 연산기와 같은 다른 부분들은 한 개의 하드웨어만 가지고 있음

 

  • 하이퍼쓰레드 프로세서
    • 매 사이클마다 실행할 쓰레드 결정

 

  • 시스템 성능 개선을 위한 멀티프로세싱
    • 다수의 태스크를 실행할 때, 동시성을 시뮬레이션할 필요를 줄여줌
    • 프로그램이 병렬로 효율적으로 실행할 수 있는 멀티쓰레드 형태로 표현되었을때만 멀티프로세싱으로 한 개의 응용프로그램을 빠르게 실행할 수 있음

 

Instruction-Level Parallelism

  • 여러 개의 인스트럭션을 한 번에 수행할 수 있다.

 

  • 파이프라이닝
    • 하나의 인스트럭션을 실행하기 위해 요구되는 일들을 여러 단계로 나누고 프로세서 하드웨어가 일련의 단계로 구성되며 이들 단계를 하나씩 각각 수행
    • 병렬도 동작가능

 

  • 사이클당 한 개의 인스트럭션 실행에 근접하는 실행속도를 유지할 수 있다.

 

  • Single-Instruction, Multiple-Data (SIMD) Parallelism
    • 사이클당 한 개 이상의 인스트럭션을 실행할 수 있는 프로세서

 

 


1-9-3. The Importance of Abstractions in Computer Systems

  • 인스트럭션 집합 구조 : 실제 프로세서 하드웨어의 추상화
  • 파일 : 입출력 장치의 추상화
  • 가상메모리 : 프로그램 메모리의 추상화
  • 프로세스 : 실행 중인 프로그램의 추상화
  • 가상머신 : 운영체제, 프로세서, 프로그램 모두를 포함하는 컴퓨터 전체의 추상화

 

 

 


Computer Systems: A Programmer's Perspective, 3rd Edition

Randal Bryant (Author), David O'Hallaron (Author)

 

 


🔗 Reference

 

 

 

728x90