티스토리 뷰

728x90

 

 

 

1. CPU와 메모리

  • CPU와 메모리
    • CPU의 구성, 동작, 기능에 대해 배워본다.
    • 메모리에서 캐시메모리 🌟 가 중요하다. 컴퓨터 시스템 향상을 위해서  CPU와 주기억장치 사이에 있는 작은 메모리이다
      • L2, L3의 캐시메모리가 있고 이것은 CPU와 별도의 공간이며 메인 메모리와 CPU 간의 속도차이를 극복하기 위한 것이다.
    • CPU의 핵심 동작인 데이터 가져오기, 디코딩, 실행에 대해서 다루고, 레지스터, 제어장치, 연산장치 등 CPU의 구성요소와 컴퓨터의 구성에 대한 내용을 배운다.

 

 

 

 

2. CPU와 메모리 심화 

  • 스케쥴링 : 오버헤드 ↓ / 사용률 ↑ / 기아 현상 ↓ 할 수 있게 한다. 모든 프로세스가 공평하게 분배하는 방식
    • 스케쥴링의 단위와 알고리즘 평가기준을 알아본다.
    • 스케쥴링의 종류
      • 선점스케쥴링 : OS가 나서서 CPU사용권을 '선점'하고, 특정 요건에 따라 각 프로세스의 요청이 있을 때 프로세스에게 분배하는 방식입니다.
      • 비선점스케쥴링 : 어떤 프로세스가 CPU를 할당받으면 그 프로세스가 종료되거나, 입출력 요구가 발생하여 자발적으로 중지될 때 까지 계속 실행되도록 보장하는 방법입니다.
    • 스케쥴링 동작시점

 

 

  • 캐시란 🌟 : 데이터를 미리 복사해 놓는 임시 저장소
    • 즉, 캐시는 계층과 계층 사이에서 속도차이를 해결하기 위한 임시 저장소입니다.
      • ex1) 레지스터 : 메모리와 CPU 사이의 속도 차이를 해결하기 위한 캐시
      • ex2) 주기억장치 : 캐시 메모리와 보조기억장치 사이의 속도 차이를 해결하기 위한 캐시
  • 캐시히트와 캐시미스
    • 캐시히트 :  (시내버스) 근처에서 캐시에 원하는 데이터를 찾은 것
    • 캐시미스 : (광역버스) 해당 데이터가 캐시에 없다면 주메모리로 가서 데이터를 찾아오는 것

 

  • 메모리할당 : 메모리에 프로그램을 할당할 때는 시작 메모리 위치, 메모리의 할당 크기를 기반으로 할당합니다 연속할당과 불연속 할당으로 나뉜다.
    • 연속할당 : 메모리에 '연속적으로' 공간을 할당하는 것을 말합니다. 고정 분할 방식과 가변 분할 방식으로 나뉩니다.
      • 고정분할방식 : 메모리를 미리 나누어 관리, 한계로는 내부 단편화가 발생한다.
      • 가변분할방식 : 매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용하는 방식이다.
    • 불연속할당 : 운영체제에서는 여러개의 작업을 효율적으로 수행해야하기 때문에 불연속 할당방법을 사용합니다. 1) 페이징, 2) 세그멘테이션, 3)페이지드 세그멘테이션 기법 존재
      1. 페이징 :
        • 동일한 크기의 페이지 단위 나누어 메모리의 서로 다른 위치에 프로세스를 할당
        • 빈데이터(홀)의 크기가 균일하지 않은 문제가 없어지지만 주소 변환이 복잡
      2. 세그멘테이션
        • 의미 단위인 세그먼트로 나누는 방식
        • 코드와 데이터 등을 기반으로 나눌 수 있으며, 함수 단위로 나눌 수도 있음을 의미합니다.
        • 공유와 보안 측면에서 좋습니다.
        • 빈데이터(홀) 크기가 균일하지 않는 문제 발생
      3. 페이지드 세그멘테이션
        • 공유나 보안은 세그먼트로 나누고
        • 물리적 메모리는 페이지로 나누는 방식

 

 

 

 

3. 프로세스 생명주기와 프로세스 메모리

  • 프로그램과 프로세스
    • 보조기억장치 = 프로그램이 저장되어 있는 곳
    • 주 기억장치 = 프로그램이 로딩되는 곳
    • 프로세스 = 프로그램을 실행해주는 주체
    • 쓰레드 = 작업을 처리해주는 주체
  • 프로세스 생명주기
    • 프로세스 상태(Status), 대기 큐(Waiting Queue), 스케쥴링 (Scheduling), 주-보조 교환 (Swapping), 문맥 교환 (Context Switching) 🌟

 

 ✅ 정리하기

 

  1. 프로세스 : 메모리에 올라온 프로그램
  2. 프로세스 생명주기 : 신규 - 준비 - 수행 - 대기 - 종료
  3. PCB : 프로세스의 실행 정보와 상태 정보를 저장하는 자료구조 (PID, PC, Register, MMU 등)
  4. 대기 큐 (Queue) : Job, Ready, Device Queue 등
  5. Scheduler : Job, CPU, Device Schduler 등
  6.  Swapping : 안쓰는 프로세스 HDD로 내리고, 다시 쓰이면 메모리로 올리는 작업
  7.  Context Switching : Running 프로세스를 Ready로 만들고 다른 프로세스로 전환
  8.  Dispatcher : 컨텍스트 스위칭할 때 필요한 정보(PCB를 저장하고 꺼내는 프로그램)
  9. CPU 시간공유 시스템 : (대부분의)OS에서 프로세스(스레드)가 시간단위로 나누어서 CPU를 사용할 수 있도록 관리해주는 시스템
  10. 프로세스 메모리 공간 : 프로세스 주소 공간은 Code, Data, Stack, Heap 으로 구성됨
  11. 커널 : 커널은 대부분의 운영 체제(OS)의 주요 구성 요소이며 컴퓨터 하드웨어와 프로세스를 잇는 핵심 인터페이스
  12. PCB : 프로세스의 실행 정보와 상태 정보를 저장하는 자료구조로 커널 프로세스에 존재

 

 

 

 

 

 

 

 

[ 스쿼드 ] 

 

오늘의 중요 개념

  • 1-2 캐싱 개념 🌟🌟🌟🌟
    • 실제 개발 시에도 많이 사용됨 (Redis 등 이용)
    • 캐싱을 사용하는 이유
    • cache-hit / cache-miss
  • 1-2 메모리할당 개념 🌟🌟🌟
    • 세그멘테이션
    • 페이징
    • 페이지드 세그멘테이션
    • 외부 단편화 / 내부 단편화
  • 1-3 context switching 개념 🌟🌟🌟🌟
    • 멀티프로세스(스레드) 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)를 교체하는 작업을 Context Switch(Context Switching)
    • context-switching을 하기 위해선 약간의 시간, 전환 시간이 필요하다는 것이다.
      • 이 시간 동안 CPU가 수행할 수 있는 유효한 작업이 없기 때문에 순수한 오버헤드가 일어난다.
      • 자주 일어나면 좋지않다.
    • 스레드의 context-swiching 시간은 프로세스보다 적게 걸리기 때문에 더 효율적
    • 스레드와 프로세스 차이는 1-4에 자세히 나옴 → 이부분 매우 중요
  • 이런 개념들을 잘 기억해 두었다가 적용가능한 부분들을 추후 팀 프로젝트 개발시에 적용한다면 매우 좋을듯 ❗
  • cs지식은 면접을 위한 공부만이 아니라 나중에 실무 개발할 때 몰라서는 안되는 내용이다!
반응형
반응형
TAG
more
최근에 올라온 글