ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [WEEK06] 정글5기 - 탐험준비 - Malloc Lab
    정글 크래프톤 5기 회고 및 정리/WIL 2024. 4. 25. 13:52

    1. 가상 메모리,  페이징

    - 가상 메모리의 등장 배경

    메모리란? - 메모리란 프로그램과 프로그램 수행에 필요한 데이터 및 코드를 저장하는 장치이다.
    - 메모리는 크게 내부 기억장치인 주기억장치와 외부 기억장치인 보조 기억장치로 분류된다
        · DRAM, CPU 안에 있는 레지스터(register)와 캐쉬(cache memory) 등이 전자에 해당된다.
        · SSD, HDD 등이 후자에 해당된다.
    가상 메모리
    등장 배경
    - 우리 컴퓨터는 여러 프로세스들을 처리하는데, 컴퓨터의 실제 메모리는 한정적이다.

    - 가상 메모리 기법은 애플리케이션을 실행하는 데 얼마나 많은 메모리가 필요한지에 집중하지 않고,
        대신 애플리케이션을 실행하는 데 최소한 얼마만큼의 메모리가 필요한가에 집중하여 문제를 해결하고자함.
        · 이렇게 접근하는 방식이 가능한 이유는, 메모리 접근이 순차적이고 지역화되어 있기 떄문이다.
        · 이렇게 애플리케이션의 일부분만 메모리(기억장치)에 올려진다면, 메모리에 올라가지 않는 나머지는
           어디에 위치해야 할까? → 정답은 보조 기억 장치, 즉 디스크!
        · 가상 메모리의 핵심은 보조 기억장치이다.

     

    - 가상 메모리

    가상 메모리란? - 가상 메모리는 물리적 메모리(RAM)보다 큰 메모리 공간을 프로그램에게 제공하는 기술

    - 이를 통해, 실제 메모리보다 큰 프로그램을 실행할 수 있으며, 여러 프로그램이 동시에 실행될 때 각각의 프로그램이 서로의 메모리 공간을 침범하지 않도록 격리시킬 수 있다.
    가상 메모리의
    특징
    1. 요약
    - 가상 메모리 시스템은 실제 메모리와 보조 저장 장치를 사용하여 가상의 주소 공간을 생성
        · 운영체제는 프로세스가 요구하는 메모리 주소를 가상 주소로 관리하며,
        · 실제 물리적 주소와의 매핑은 메모리 관리 단위에 의해 동적으로 이뤄진다.


    2. 상세히 정리
    - 애플리케이션이 실행될 때, 실행에 필요한 일부분만 메모리에 올라가며 애플리케이션의 나머지는 디스크에 남게 된다.
        · 즉, 디스크가 RAM의 보조 기억장치(backing store)처럼 동작한다.
        · 결국 빠르고 작은 기억장치(RAM)을 크고 느린 기억장치(디스크)와 병합하여,
          하나의 크고 빠른 기억장치(가상 메모리)처럼 동작하게 하는 것이다.
    - 가상 메모리를 구현하기 위해서는 컴퓨터가 특수 메모리 관리 하드웨어를 가지고 있어야함 → MMU
    MMU
    (Memory
    Management
    Unit)
    - MMU는 가상주소를 물리주소로 변환하고, 메모리를 보호하는 기능을 수행한다.
    - MMU를 사용하게 되면, CPU가 각 메모리에 접근하기 이전 메모리 주소 번역 작업이 수행된다.
    - 그러나 메모리를 일일이 가상 주소에서 물리적 주소로 번역하게 되면 작업 부하가 너무 높아지므로,
       MMU는 RAM을 여러 부분(페이지, pages)로 나누어 각 페이지를 하나의 독립된 항목으로 처리함
    - 페이지 및 주소 번역 정보를 기억하는 작업이 가상 메모리를 구현하는 데 있어 결정적인 절차이다.

     

    - 페이징

    페이징이란? - 페이징은 가상 메모리를 구현하는 방법 중 하나로, 메모리를 고정된 크기의 블록(페이지)으로 나누는 방식이다.
    - 각 페이지는 물리 메모리의 페이지 프레임에 매핑될 수 있으며, 프로그램이 요구하는 메모리 주소는 '페이지 테이블'을 통해 실제 물리적 주소를 반환한다.
    페이징의 이점 1. 메모리 보호
    - 각 프로세스의 메모리 영역이 격리되어, 한 프로세스가 다른 프로세스의 메모리에 무단으로 접근하는 것을 방지

    2. 메모리 할당의 유연성
    - 프로세스에 할당된 가상 메모리 페이지는 연속적이지 않아도 되므로, 물리 메모리의 단편화 문제를 줄일 수 있다.

    3. 스왑 아웃
    - 사용하지 않는 페이지를 하드 드라이브와 같은 보조 메모리에 저장(스왑 아웃)함으로써, RAM을 효율적으로 관리
    페이징 요약 추가 - 운영체제는 페이지 테이블을 관리하며, CPU의 MMU는 가상 주소를 실제 물리적 주소로 변환하는 데 사용한다.
    - 만약 요청된 페이지가 물리 메모리에 없으면 '페이지 폴트'가 발생하고, 운영체제는 해당 페이지를 디스크에서 찾아 메모리에 로드한다.

    -  MMU가 메모리를 일일이 가상 주소에서 물리 주소로 변환하게 되면, 작업 부하가 높아질 수 있다.
        · 그래서 MMU는 실제 물리 메모리 공간을 여러 페이지 단위로 나눠서, 각 페이지 단위로 데이터를 처리한다.
    요구 페이징
    (demand
    paging)

    이란?
    - 요구 페이징은 CPU가 요청할 때 프로세스의 데이터를 메모리에 올리는 것을 의미한다.
        · 즉, 처음부터 모든 데이터를 메모리로 적재하지는 않음.
    페이지 폴트
    (page faults)
    이란?
    - 페이지 폴트란 어떤 페이지에 접근하려고 했을 때 해당 페이지가 실제 물리 메모리에 부재할 때  뜨는 인터럽트이며,
       페이지 폴트가 발생하면 운영체제가 이를 해결한 뒤 다시 동일한 명령을 수행하는 식으로 동작한다.

    - 페이지 폴트란, 어떤 프로그램이 자신의 주소 공간(가상 메모리 공간)에는 존재하지만 시스템의 RAM에는 현재 존재하지 않는 데이터/ 코드에 접근을 시도할 경우 발생하는 현상을 의미한다.
    - 페이지 폴트가 발생하면 운영체제는 그 데이터를 메모리로 가져와서, 마치 페이지 폴트가 전혀 발생하지 않은 것처럼 프로그램이 계속적으로 작동하게 해줌

    - 이러한 페이지 폴트가 자주 일어날수록 운영체제의 성능이 많이 저하되기 때문에 페이지 폴트가 일어나지 않도록 하는 것이 중요하다.
    - 페이지 폴트를 최소화하기 위한 방법으로 페이지 교체 정책(page replacement policy)이 있다.
        · 메모리가 가득 차 있을 때 기존 페이지 중 하나를 물리 메모리에서 저장 매체로 내리고,
        · 새로운 페이지를 방금 비워진 해당 물리 메모리 공간에 올린다.
        · 이 때 기존 페이지 중 어떤 것을 내리면 좋을지에 대한 알고리즘이 페이지 교체 알고리즘이다.

     

    - 페이징 캐싱

    TLB
    ( Translation
    Lookaside
    Buffer,
    페이징 정보 캐쉬 )
    이란?
    - TLB는 가상 메모리 주소를 물리적 주소로 변환하는 속도를 높이기 위해 사용하는 캐시로, 최근에 일어난 가상 메모리와 물리 주소의 변환 테이블을 저장해둔다.
    - CPU가 가상 주소를 가지고 메모리에 접근하려고 할 때 우선은 TLB에 접근하여 가상 주소에 해당되는 물리 주소를 찾고, 만약 TLB에 매핑이 존재하지 않는다면 MMU가 페이지 테이블에서 해당되는 물리 주소로 변환한 후 메모리에 접근한다.

    - TLB는 MMU에 포함되어 있는 작은 캐시로, 일종의 주소 변환 캐시라고 할 수 있음
    - TLB 사용 이점 : 물리주소를 갖고 있으면 메모리(RAM)에 두 번 들릴 필요없이, 바로 해당 물리주소(in 메모리)를 찾아갈  수있다.
    캐시 메모리란? - 캐시 메모리란, 속도가 빠른 장치와 느린 장치 사이에서 속도 차에 따른 병목 현상을 줄이기 위한 범용 메모리를 의미한다.
        · 예를 들어, CPU에서의 캐시 메모리는 CPU 코어(고속)와 메모리(CPU에 비해 저속) 사이에서
          속도 차에 따른 병목 현상을 완화하는 역할을 한다.

    - 또한, 인터넷 웹 브라우저에는 캐시 파일이라는 개념이 있는데 캐시 파일은 웹 페이지 상의 이미지 등을 하드디스크에 미리 저장해두고, 다음 번에도 해당 웹 페이지에 접근할 때 해당 사이트에 이미지를 다시 요청하는 게 아니라 하드디스크에서 이미지를 불러들여 로딩 속도를 높이는 역할을 한다.
        · 즉, 캐시 파일은 비교적 속도가 빠른 하드 디스크과 상대적으로 느린 웹 페이지 가운데서의 병목을 줄이는 역할을 함.

     

    * 가상 메모리와 가상(논리) 주소 공간

    가상 주소 공간 - 가상 주소 공간은 각 프로세스 당 주어지는 논리적인 공간
    - 가상 주소 공간의 크기는 물리 메모리(RAM)의 크기와는 독립적이며, 레지스터 크기에 종속적이다
    가상 주소 공간 구조 - Stack : 지역변수, 함수의 매개변수 (함수 실행 시 저장, 종료 시 반환)
    - Unused Address Space : 필요할 경우 (런타임 간 저장, 원할 때 반환)
    - Heap : 사용자의 동적 할당 (런타임 간 저장, 원할 때 반환)
    - Data and BSS : 초기화된 변수(Data), 초기화 안 된 변수(BSS) (컴파일 시 저장, 프로그램 종료 시 반환)
    - Instruction(Code or Text) : 실행할 코드(기계어 형태) (컴파일 시 저장, 프로그램 종료 시 반환)

     

    * 개인적인 요약

    가상 메모리의 동작 방식 1. 프로세스가 실행되면서 필요한 내용은 RAM에 할당, 나머지는 SSD/HDD에 저장

    2. 프로세스가 RAM에게 필요한 정보를 요청할 때
        · 해당 정보가 있으면 물리적 주소 반환
        · 없으면 RAM이 CPU에게 '페이지 폴트'를 반환

    3. 페이지 폴트가 생겼을 때 CPU의 MMU(페이지 테이블)는 가상 주소를 통해 물리적 주소를 알아낸다.
        · 해당 작업을 페이지 단위로 데이터를 처리한다.
    + 요약  - 가상 메모리는 물리적 메모리(RAM)보다 큰 메모리 공간을 프로그램에게 제공하는 기술

    - 가상 메모리에서는 각 데이터 메모리를 페이지 단위로 저장 및 관리하고, 그 페이지의 가상 주소를 물리 주소로 변환해서 실제 물리 데이터에 접근할 수 있다.

     

     

     

    2. 동적 메모리 할당 (힙, sbrk, malloc, free)

    동적 메모리 할당 - 프로그램 실행 중에 메모리의 할당 및 해제를 허용하는 프로세스
    - 이는 특히 프로그램이 실행되는 동안 필요한 메모리 양이 변동될 때 유용하다.
    - 동적 메모리 할당은 주로 '힙'이라고 불리는 메모리 영역에서 이루어진다.
    힙 (Heap) - 힙은 프로그램의 데이터를 동적으로 저장하기 위한 메모리 영역이다.
    - 전역 변수나 정적 변수와 달리, 힙 영역의 메모리는 프로그램의 수명과 독립적으로 존재한다.
    - 즉, 프로그래머가 직접 관리해야 하며, 사용이 끝난 메모리는 명시적으로 해제해야한다.
    - 힙을 사용하여 할당된 메모리는 '동적 변수' 또는 '힙 변수'라고 한다.
    sbrk() - sbrk 함수는 힙 영역의 크기를 변경하기 위해 UNIX 시스템 호출로 사용된다.
    - 이 함수는 힙의 끝을 옮겨 메모리를 할당하거나 해제한다.
    - sbrk(0)을 호출하면 현재 힙의 끝 주소를 반환한다.
    - 양의 인자를 주어 호출하면 힙을 확장하고, 음의 인자를 주어 호출하면 힙을 축소한다.
    malloc() - malloc 함수는 힙에 특정 크기의 메모리 블록을 할당하기 위해 사용된다.
    - malloc은 할당된 메모리 블록의 포인터를 반환하며, 이 포인터는 할당된 메모리에 접근하기 위해 사용된다.
    free() - free 함수는 malloc에 의해 할당된 메모리를 해제한다.
    - malloc으로 할당한 메모리를 더 이상 사용하지 않을 때, 해당 메모리를 해제하기 위해 free를 호출한다.
    - 이는 메모리 누수를 방지하는 중요한 과정이다.
    메모리 누수
    (Memory Leak)
    - 메모리 누수는 프로그램이 동적으로 할당한 메모리를 적절히 해제하지 않을 때 발생한다.
    - 이로 인해 사용하지 않는 메모리가 시간이 지남에 따라 계속 쌓이게 되고, 이는 시스템의 성능 저하 또는 크래시를 초래할 수 있다.
    동적 메모리 관리의
    중요성
    - 동적 메모리 관리는 자원이 제한된 시스템에서 특히 중요하다. 최적의 성능을 위해!
    - 동적으로 할당된 메모리를 적절히 관리해야 하며, 사용하지 않는 메모리는 항상 해제해야 한다.
    - 잘못된 메모리 관리는 메모리 누수, 메모리 손상, 프로그램 오류 등을 초래할 수 있다.

     

     

    3. 메모리 단편화

    메모리 단편화
    (memory fragmnetation)
    - 컴퓨터의 RAM이 작고 사용할 수 없는 조각으로 나뉘어 사용 효율성이 떨어지는 현상을 말한다.

    - 메모리 단편화는 크게 두 가지 유형으로 나뉜다.
        · 외부 단편화(external fragmentation)
        · 내부 단편화(internal fragmentation)

    - 메모리 단편화는 시스템의 전반적인 성능에 영향을 미칠 수 있으며, 효율적인 메모리 관리 알고리즘과 가비지 컬렉션과 같은 메모리 회수 기술을 통해 이를 최소화할 수 있다.
    외부 단편화
    (External Fragmentation)
    - 외부 단편화는 할당된 메모리 블록 사이에 발생하는 미사용 공간의 축적으로 인해 발생한다.

    - 이러한 공간은 충분히 커서 여러 개를 합치면 유용하게 사용할 수 있지만, 개별적으로는 너무 작아서 사용할 수 없는 경우가 많다.

    - 예를 들어, 프로세스가 10MB의 메모리를 요청하는데, 10MB 이상의 총 공간이 있지만 4, 3, 3MB으로 나눠져 있어 연속된 10MB 공간을 할당할 수 없는 경우
    외부 단편화
    해결 방안
    1. 메모리 압축
    - 사용 중인 메모리 블록을 이동시켜 연속된 공간을 만드는 방법
    - 비용이 많이 들고 시간이 오래 걸릴 수 있다.

    2. 페이징 및 세그먼테이션
    - 물리적 메모리를 페이지나 세그먼트(논리적 단위)로 나누고, 가상 메모리를 사용하여 연속성의 요구를 완화한다.

    3. 베스트 핏, 퍼스트 핏, 넥스트 핏 할당 알고리즘
    - 각각 가장 적합한 크기, 첫 번째 적합한 크기, 마지막 할당 이후 다음 적합한 크기의 블록을 찾아 할당하는 방법
    내부 단편화
    (Internal Fragmentation)
    - 내부 단편화는 할당된 메모리 블록 내부에 사용되지 않는 공간이 생기는 현상

    - 이는 메모리가 고정된 크기의 블록(예: 페이지)으로 나뉠 때 일어난다.
    - 프로세스가 메모리 블록을 요청하고, 할당된 블록이 요청한 크기보다 클 경우, 남는 공간이 생기는데, 이 공간은 해당 블록 내부에서는 다른 용도로 사용할 수 없으므로 낭비된다.

    - 예를 들어, 시스템이 4KB 크기의 페이지를 사용하고 어떤 프로세스가 10KB의 메모리를 요청하면, 3개의 페이지(12KB)가 할당된다. 이 경우 2KB의 내부 단편화가 발생한다.
    내부 단편화
    해결 방안
    1. 슬랙 공간 사용
    - 필요한 것보다 조금 더 큰 메모리 블록을 할당하여, 프로그램이 요청한 크기와 블록 크기 사이의 차이를 최소화한다.

    2. 변수 크기 할당
    - 가능한 경우, 메모리 블록을 요청받은 크기에 더 가깝게 할당한다.

     

     

    4. 메모리 할당 정책 (first fit, next fit, best fit)

    메모리 할당 정책 - 동적 메모리 할당에 사용되는 알고리즘으로, 프로세스나 파일에 할당할 메모리 영역을 결정하는 방법

    - 주로 사용되는 정책
        · first fit
        · next fit
        · best fit
    - 이 정책들은 특히 가변 파이티션 할당 방식에서 중요하며, 메모리 단편화를 줄이고 메모리 사용 효율을 높이는 데 도움을 준다.
    - 각 정책은 장단점을 가지고 있으며, 시스템의 특성과 요구에 따라 적절한 정책을 선택해야 한다.
        · 실제 시스템에서는 이러한 기본 정책을 변형하거나 결합하여, 메모리 할당의 효율성을 최적화한다.
    First Fit - 메모리에서 프로세스가 요구하는 크기와 같거나 큰 첫 번째 빈 공간(홀)에 메모리를 할당하는 방식
    - 메모리를 순차적으로 탐색하며, 충분히 큰 첫 번째 빈 공간을 찾으면 그 자리에 프로세스를 할당한다.

    - 퍼스트 핏은 구현이 간단하고 빠른 할당이 가능하지만, 메모리의 앞부분에 작은 홀들이 많이 생길 수 있어 외부 단편화를 야기할 수 있다.
    Next Fit - 퍼스트 핏과 유사하지만, 매번 메모리 탐색을 시작하는 위치가 바뀐다.
    - 마지막으로 할당된 공간의 다음 위치부터 탐색을 시작하여 프로세스가 들어갈 수 있는 충분히 큰 다음 공간을 찾는다.

    - 넥스트 핏은 퍼스트 핏보다 메모리 전체에 할당이 더 고르게 분포되는 경향이 있지만, 큰 프로세스를 할당하기 어려운 경우가 많아질 수 있다.
    Best Fit - 프로세스가 요구하는 크기와 가장 잘 맞는, 즉 가장 작은 크기의 빈 공간에 할당하는 방식이다.
    - 메모리 전체를 탐색하여 가장 적은 크기의 공간 낭비가 발생하는 곳에 프로세스를 할당한다.

    - 베스트 핏은 공간을 효율적으로 사용할 수 있으나, 메모리 전체를 탐색해야 하므로 할당에 시간이 오래 걸릴 수 있고, 매우 작은 크기의 홀을 많이 생성하여 외부 단편화를 야기할 수 있다.

     

     

    5. implicit free list / explicit free list

    동적 메모리 할당 시스템에서의
    메모리 관리 방법
    - Implicit Free List (암시적 자유 목록)
    - Explicit Free List (명시적 자유 목록)
    Implicit Free List - 할당되지 않는 메모리 블록들이 연속적으로 메모리에 나열되어 있으며, 각 블록은 자신의 크기와 할당 여부를 나타내는 헤더로 시작한다.
    - 메모리를 할당하거나 해제할 때, 메모리 전체를 순차적으로 탐색하면서 자유 블록(free block)을 찾거나, 사용 중인 블록(allocated block)을 해제한다.

    - 이 방식의 가장 큰 특징은 자유 블록 목록이 별도로 존재하지 않는다는 것이다.
    - 즉, 메모리 할당자는 헤더를 통해 메모리를 순차적으로 탐색하며 사용 가능한 블록을 찾아야 한다.
    - 이 방식은 구현이 간단하지만, 메모리 할당과 해제 과정에서 효율성이 떨어질 수 있다.
        · ex) 메모리를 탐색하는 시간이 오래 걸림.
    Explicit Free List - 모든 자유 블록들이 하나의 연결 리스트(linked list) 또는 여러 연결 리스트로 관리된다.
    - 각 자유 블록은 다음과 이전 자유 블록을 가리키는 포인터를 포함하고 있어, 자유 블록 목록을 통해 빠르게 사용 가능한 메모리 블록을 찾을 수 있다.

    - 명시적 자유 목록 방식은 메모리를 할당하고 해제할 때 효율적이다.
    - 메모리 할당자는 리스트를 따라가며 적절한 크기의 블록을 빠르게 찾을 수 있고, 메모리 블록을 해제할 때도 해당 블록을 자유 목록에 추가하기만 하면 된다.
    - 하지만 이 방식은 암시적 목록에 비해 복잡한 구현이 요구 된다 .
    성능 비교 Implicit free list
    - 메모리 할당 및 해제 시 전체 메모리를 탐색해야 하므로 할당 시간이 오래 걸릴 수 있다.
    - 이는 특히 메모리가 많이 할당되어 있을 때 더욱 심해진다.  

    Explicit free list
    - 자유 블록을 빠르게 찾을 수 있어 할당과 해제가 빠르다.
    - 하지만 리스트를 유지 관리해야 하는 추가적인 오버헤드가 있다.

    - Explicit free list는 메모리 관리에서 더 나은 성능을 제공하지만, 구현의 복잡성이 증가하는 trade-off가 있다.
    - 실제 시스템에서는 이러한 방식들을 개선하여 더욱 효율적인 메모리 할당자를 구현한다.
    - 예를 들어, segregated free list는 다양한 크기의 블록들을 서로 다른 자유 목록에 분리하여 관리하는 방식으로, 효율성과 속도의 균형을 맞추려는 시도 중 하나이다.

     

     

    6. demand-zero memory

    Demand-zero
    memory
    - 가상 메모리 관리 기법 중 하나로, 페이지가 실제로 사용되기 전까지는 물리적 메모리에 할당되지 않는 방식이다.
    - 즉, 프로세스에 의해 메모리가 요청될 때까지 해당 메모리 페이지를 '0'으로 초기화하여 대기시키는 것이 아니라, 실제로 해당 페이지가 접근되어 사용될 때 '0'으로 채워진 페이지를 할당하고 초기화한다.

    - 이 기법의 주요 장점은  메모리의 효율적인 사용이다.
        · 프로세스가 시작될 때, 모든 메모리를 바로 할당하지 않고 필요할 때 할당하기에
        · 시스템은 더 많은 프로세스를 동시에 관리할 수 있으며,
        · 실제로 사용되지 않는 메모리 페이지에 대한 물리적 메모리 낭비를 줄일 수 있다.
    동작 방식 1. 페이지 폴트
    - 프로세스가 아직 메모리에 로드되지 않은 주소에 접근하려고 하면 페이지 폴트가 발생한다.

    2. 디맨드 제로
    - 페이지 폴트 핸들러가 해당 페이지를 물리적 메모리에 매핑하고, '0'으로 초기화한다.
    - 이러한 방식으로 페이지는 '요구에 의해 제로화(demand-zero)' 되었다고 한다.

    3. 사용
    - 초기화된 페이지는 이제 프로세스에 의해 사용될 수 있으며, 프로세스는 '0'으로 초기화된 메모리를 사용하여 자신의 데이터를 저장하게 된다.
    장점 1. 메모리 절약
    - 실제로 사용되지 않는 페이지는 물리적 메모리를 차지하지 않는다.

    2. 효율성
    - 프로세스 시작 시 필요한 전체 메모리를 할당할 필요가 없으므로, 빠른 시작이 가능하다.

    3. 유연성
    - 프로세스가 필요한 만큼의 메모리만 사용하므로, 시스템은 메모리를 더 유연하게 관리할 수 있다.
    단점 1. 오버헤드
    - 페이지가 실제로 사용될 때마다 페이지 폴트 처리가 필요하므로 오버헤드가 발생할 수 있다.

    2. 성능 지연
    - 페이지를 '0'으로 초기화하는 과정에서 미세한 지연이 발생할 수 있으며, 페이지 폴트가 빈번하게 발생하면 시스템의 전체적인 성능에 영향을 줄 수 있다.
    마무리 - Demand-zero memory는 특히 대규모 멀티태스킹 환경이나 메모리 자원이 제한적인 시스템에서 유용하다.
    - 이 기법은 가상 메모리가 도입된 운영 시스템에서 널리 사용되며, 메모리 사용의 효율성을 높이기 위한 중요한 전략 중 하나이다.

     

     

    7. 시스템 콜

    시스템 콜
    (system call)
    - 운영 체제의 서비스를 요청하기 위해 프로그램이 커널에게 전달하는 인터페이스 또는 함수이다.

    - 사용자 모드에서 실행되는 프로세스가 운영 체제의 커널 모드에 있는 기능을 안전하게 사용하고자 할 때 시스템 콜을 사용한다.
    기능 - 프로세스 관리
        · 프로세스 생성(fork), 실행(exec), 종료(exit), 스케줄링과 같은 기능을 관리한다.
    - 파일 조작
        · 파일 생성, 삭제, 읽기, 쓰기, 재명명, 파일 속성 변경 등 파일 시스템과 관련된 작업을 수행한다.
    - 장치 관리
        · 장치  드라이버와의 통신을 위한 장치 열기, 읽기, 쓰기, 닫기 등의 기능을 담당한다.
    - 메모리 관리
        · 메모리 할당, 페이지 교체 등 메모리와 관련된 작업을 수행한다.
    - 통신
        · 프로세스 간 통신(IPC)이나 네트워킹 관련된 시스템 콜을 제공한다.
    - 사용자 인증 및 관리
        · 사용자 권한 관리, 비밀번호 변경 등 사용자와 관련된 서비스를 제공한다.
    동작 방식 1. 호출
    - 응용 프로그램은 특정 작업을 수행하기 위해 시스템 콜 함수를 호출한다.

    2. 컨텍스트 스위치
    - 프로세스가 시스템 콜을 호출하면 CPU는 사용자 모드에서 커널 모드로 전환한다.

    3. 실행
    - 커널은 요청된 서비스를 실행한다.
    - 이때 커널은 모든 하드웨어 리소스에 대한 전체적인 제어 권한을 가지고 있다.

    4. 리턴
    - 작업을 완료한 후, 커널은 결과를 반환하고 CPU는 다시 사용자 모드로 전환하여 프로그램 실행을 계속한다.
    중요성 - 시스템 콜은 사용자 프로그램과 운영 체제 사이의 중요한 인터페이스이다.
    - 이를 통해 하드웨어 리소스를 안전하고 효율적으로 관리할 수 있으며, 다양한 운영 체제 기능을 프로그램에서 활용할 수 있게 해준다.
    - 시스템 콜을 사용함으로써, 프로그램은 운영 체제가 제공하는 보호 기능과 자원 관리 기능의 혜택을 받을 수 있다.

     

     

    8. DMA

    DMA
    (Direct
    Memory
    Access)
    - 컴퓨터 시스템에서 CPU의 개입 없이 장치가 메모리에 직접 접근할 수 있게 하는 기능이다.
    - DMA는 특히 대용량 데이터를 빠르게 전송해야 할 때 유용하며, 시스템의 전반적인 성능 향상에 기여한다.
    작동 원리 1. DMA 요청
    - 입출력 장치는 데이터 전송이 필요할 때 DMA 컨트롤러에 전송을 요청한다.

    2. DMA 컨트롤러
    - CPU는 DMA 컨트롤러에게 데이터 전송 권한을 부여한다.
    - 이 때 CPU는 다른 작업을 수행할 수 있다.

    3. 메모리 접근
    - DMA 컨트롤러는 입출력 장치와 메모리 사이의 데이터 전송을 직접 관리한다.
    - 이 과정에서 CPU는 데이터 전송 과정에 관여하지 않는다.

    4. 전송 완료
    - 데이터 전송이 완료되면, DMA 컨트롤러는 CPU에 인터럽트를 보내어 전송이 끝났음을 알린다.

    5. CPU 개입
    - CPU는 인터럽트를 받고 전송된 데이터를 처리할 수 있다.
    장점 1. 효율성
    - CPU가 데이터 전송을 직접 관리하지 않으므로, CPU는 다른 계산 작업에 더 많은 시간을 할애할 수 있다.

    2. 속도
    - 메모리와 장치 간의 데이터 전송이 빠르게 이뤄질 수 있다.

    3. 병렬 처리
    - CPU가 다른 작업을 계속하는 동안 데이터 전송이 이뤄질 수 있으므로, 시스템의 병렬 처리 능력이 향상된다.
    단점 1. 복잡성
    - DMA 컨트롤러는 시스템 설계와 소프트웨어에 추가적인 복잡성을 추가한다.

    2. 자원 충돌
    - 메모리 버스를 사용하는 다른 프로세스와 충돌이 발생할 수 있다.
    - 이를 관리하기 위한 추가적인 논리가 필요하다
    사용 사례 - DMA는 하드 드라이브, 네트워크 카드, 사운드 카드와 같이 대량의 데이터를 빠르게 전송해야 하는 입출력 장치에서 주로 사용된다.
    - 예를 들어, 하드 드라이브로부터 대용량 파일을 읽을 때, DMA를 사용하면 CPU가 파일을 읽는 동안 다른 작업을 계속할 수 있다.

    - 현대 컴퓨터 시스템에서 DMA는 매우 중요한 기능으로, 고성능 컴퓨팅과 멀티태스킹 환경에서 더욱 중요한 역할을 한다.

     


    9. 이더넷 (다음 주를 위한 키워드)

    이더넷
    (Ethernet)
    - 이더넷은 컴퓨터 네트워크 기술의 하나로, 지역 네트워크(LAN)에서 데이터를 전송하는 데 가장 널리 사용되는 표준이다.
    - 1970년대에 개발되어, 그 이후로 데이터 링크 계층과 물리적 계층에서 사용되는 여러 표준들을 포함하게 되었다.
    기본 작동 원리 - 이더넷은 데이터를 프레임 단위로 전송한다.
    - 각 프레임은 송신지와 목적지의 주소, 전송되는 데이터 및 오류 검사 코드를 포함한다.
    - 이더넷 네트워크에 있는 각 장치는 고유한 MAC(Media Access Control) 주소를 가지고 있으며, 이 주소를 통해 데이터가 올바른 목적지로 전송된다.
    특징 속도
    - 초기 이더넷은 10Mbps의 속도를 제공했지만, 기술이 발전하면서 100Mbps(페스트 이더넷), 1Gbps(기가비트 이더넷), 10Gbps 이상의 속도를 지원하는 표준이 개발되었다.

    토폴로지
    - 이더넷은 거의 모든 현대 컴퓨터와 스마트 장치에 구현되어 있으며, 널리 사용되고 접근하기 쉬운 기술이다.

    표준화
    - IEEE 802.3은 이더넷의 표준 규격을 정의한다.
    프레임 구조 - 목적지 MAC 주소
        · 데이터를 받을 장치의 MAC 주소
    - 출발지 MAC 주소
        · 데이터를 보낸 장치의 MAC 주소
    - 유형
        · 전송되는 데이터의 유형(예 : IPv4, ARP 등)을 식별한다
    - 데이터 및 패팅
        · 실제 전송되는 데이터와, 최소 프레임 길이를 충족시키기 위해 추가될 수 있는 패딩이다.
    - 오류 검사
        · 프레임이 정확하게 전송되었는지 확인하는 데 사용되는 오류 검사 및 수정 정보이다.
    충돌 감지
    (CSMA/CD)
    - 이더넷의 초기 버전에서는 CSMA/CD(Carrier Sense Multiple Access with Collision Detection) 라는 방식을 사용했다.
    - 이 방식에서 각 장치는 캐리어(데이터 전송 채널)를 감지하여 다른 장치가 데이터를 전송 중인지 확인하고, 채널이 사용 중이지 않을 때 데이터를 전송한다.
    - 만약 충돌이 감지되면, 각 장치는 무작위로 선택된 시간 동안 대기한 후 다시 전송을 시도한다.
    발전 - 기술이 발전함에 따라, 이더넷은 더욱 고속화되고, 신뢰성과 효율성이 개선되었다.
    - 특히 스위치를 사용하는 스위칭 이더넷은 네트워크에서 충돌을 방지하고, 전체 네트워크 대역폭을 더욱 효과적으로 사용할 수 있도록 해준다.
    - 오늘날 이더넷은 데이터 센터, 기업 네트워크 및 가정 네트워크에서 중요한 역할을 한다.

     


    ETC.. 

    1. 페이징과 세그멘테이션의 정의 및 각각의 장단점에 대해 서술하시오

    - 세그멘테이션(Segmentation)과 페이징(Paging)을 컴퓨터 메모리 관리 방법이다.

      세그멘테이션 페이징
    정의 - 이는 메모리를 의미 있는 단위 '세그먼트'로 나누는 방법이다.
    - 각 세그먼트는 시작 주소와 길이를 가지며, 다른 유형의 데이터(예 : 코드, 데이터, 스택)를 위해 사용된다.
    - 세그멘테이션은 메모리를 더 유연하게 관리할 수 있게 해주며, 프로그램의 논리적 구조를 반영할 수 있다.
    - 페이징은 메모리를 동일한 크기의 블록, 즉 '페이지'로 나누는 방법이다.
    - 각 페이지는 가상 메모리 주소와 매핑되며, 페이지 테이블을 통해 물리적 메모리 주소로 변환된다.
    - 페이징은 메모리 관리를 단순화하고, 메모리의 낭비를 줄이며, 프로그램 간의 메모리 충돌을 방지한다.
    장점 - 메모리를 논리적 단위로 나눠 프로그램의 구조를 반영함
    - 세그먼트별 보호와 공유가 용이함
    - 외부 단편화 문제를 해결함
    - 메모리 관리가 상대적으로 단순화
    단점 - 외부 단편화 발생 가능성이 있음
    - 메모리 관리가 복잡해질 수 있음
    - 내부 단편화 발생 가능성이 있음
    - 페이지 테이블 관리에 추가적인 메모리가 필요함

     

    2. DMA의 기본 개념을 설명하고, DMA가 시스템 성능에 미치는 이점을 두 가지 이상 제시하시오

    DMA - Direct Memory Access 의 약자
    - CPU의 중재 없이 주변장치가 메모리에 직접 접근하여 데이터를 읽고 쓸 수 있게 해주는 시스템의 한 기능이다.
    - DMA를 사용함으로써, 데이터 전송 과정에서 CPU가 필요하지 않으므로, CPU는 다른 작업을 수행하는 데 더 많은 시간을 할애할 수있다. 이는 시스템 성능의 향상으로 이어지는데, 특히 I/O 작업이 많은 시스템에서 그 이점이 두드러진다.
    이점 1. CPU의 부하가 감소하여 전체 시스템의 효율성이 증가한다.

    2. 데이터 전송 속도가 향상되므로, 전반적인 시스템 응답 시간이 단축된다.

     

Designed by Tistory.