일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 가상 바이트
- 메모리 누수
- Rim Light
- AppSW
- 게임 수학
- Specular
- 프로그래밍 기초
- Private Bytes
- working set
- C언어
- Virtual Byte
- ColorGradingLutPass
- Toon Shader
- Cell Shader
- ASW(Application SpaceWarp)
- 작업 집합
- Three(Two) Tone Shading
- Windows Build
- 개인 바이트
- URP로 변경
- 3d
- Cell Look
- URP
- VR
- 벡터
- Cartoon Rendering
- OculusMotionVectorPass
- Today
- Total
WinCNT
메모리 본문
데이터와 파일
파일은 메모리에 올라간다
(파일 --> 리소스 --> 메모리에 적재)
그럼 리소스를 어떻게 관리해야 할까?
프로그래머는 플레이 진행 상태만 파일 형태로 저장할 수 있다
(정확히는 DB지만 DB도 결국엔 파일과 다를 것이 없다)
그렇기 때문에 구조와 규칙을 먼저 만들 필요가 있다
그에 대해 필요한 것이 보통 DB와 그에 따른 SQL이다
SQL
Structured Query Language
몽고DB(NoSQL의 분류)
이미지 등의 리소스를 대용량으로 저장하고 빠르게 가져오게 하기 위한 DB(페이스북 등)
레디스(Redis)
메모리 DB - 메모리에 잔뜩 데이터를 적재해두는 것
결국은 설계다!!
메모리
메모리는 다음의 영역을 가진다
스택 영역, 힙 영역, 데이터 영역, 코드 영역
메모리 할당
프로세스가 기동이 되었을 때 OS가 디폴트 힙을 만들어준다
https://wincnt-shim.tistory.com/136
General Architecture of a Operating System
http://cis2.oc.ctc.edu/oc_apps/Westlund/xbook/xbook.php?unit=04&proc=page&numb=1
커널과 운영 체제
Difference Between Microkernel and Monolithic Kernel (https_techdifferences.com)
왼쪽은 커널 영역이 작은 OS(Server는 기능을 제공하는 의미의 서버)
오른쪽은 시스템 콜을 하면 바로 커널 영역의 것을 바로 수행하지만
왼쪽은 그 서비스를 제공하는 프로세스와 통신할 확률(...)이 높다
하이브리드 커널
마이크로 커널과 모노리딕 커널 아키텍처라는 양면을 합쳐 놓은 커널 구조
Context Switch는 언제 발생하는가?
멀티태스킹, 인터럽트 핸들링, 사용자 모드와 커널 모드 간의 전환까지, 크게 3가지가 존재한다.
멀티태스킹(Multitasking)
실행 가능한 프로세스들이 운영체제의 스케줄러에 의해 조금씩 번갈아가며 수행되는 것을 말한다.
번갈아 가며 프로세스가 CPU를 할당 받는데 이때 Context Switching 한다.
사용자가 체감하기 힘든 속도로 Context Switching되며 프로세스가 처리되기 때문에 동시에 처리되는 것처럼 느껴진다.
인터럽트 핸들링(Interrupt handling)
인터럽트란 컴퓨터 시스템에서 예외 상황이 발생했을때 CPU에게 알려 처리할 수 있도록 하는 것을 말한다
인터럽트가 발생하면 Context Switching한다
I/O request : 입출력 요청
time slice expired : CPU 사용시간이 만료
fork a child : 자식 프로세스 생성
wait for an interrupt : 인터럽트 처리 대기
사용자와 커널 모드 전환(User and kernel mode switching)
사용자와 커널 모드 전환은 Context Switch가 필수는 아니지만 운영체제에 따라 발생할 수 있다
POSIX
이식 가능 운영 체제 인터페이스의 약자
(나름 멀티 플랫폼)
유닉스 계열 외에 MS 윈도우 NT는 POSIX 1.0에 준하는 POSIX 서브 시스템을 탑재하고 있으며,
POSIX 응용 프로그램을 서브 시스템에서 실행할 수 있다
정리
1. 메모리를 관리하는 것은 운영체제
2. 메모리 가상 주소 공간의 주소를 부여하는 것, 가상 주소 공간과 물리 메모리 간의 매핑이 필요하다
3. 프로세스마다 부여하는 공간 중
--> 힙 영역에서 관리되는 주소 공간이 존재한다
--> 기본 메모리 주소 공간
--> VirtualAllock : chunk단위로 메모리 제공(윈도우즈에서 제공하는 API)
--> chunk를 구획화해서 만들어진 힙 공간 = block
--> 프로그래머가 new(혹은 malloc)을 호출하면 주어진 기본 힙 공간에서 할당
--> 제공된 API 사용하면 프로그래머가 힙을 만들고 그 힙에서 할당도 가능함
4. 메모리 할당과 해제 비용, 그리고 메모리 단편화를 염두에 두어야 한다
5. 물리 메모리와 가상 주소 공간의 매핑에 페이징 기법이 사용된다
페이징이 되는 메모리를 페이징 메모리
페이징이 되지 않는 메모리를 NP 메모리라고 한다
어떤 프로세스가 메모리를 얼마나 사용하는가
6. 컨텍스트 스위칭은 언제 발생하는가를 염두에 둬야 한다
SSS
'게임 프로그래밍(학습 내용 정리) > 시스템 프로그래밍' 카테고리의 다른 글
어플리케이션에서 가상 메모리 사용 방법 (0) | 2022.05.23 |
---|---|
작업 집합(Working Set), 가상 바이트(Virtual Byte), 개인 바이트(Private Bytes)...그리고 메모리 누수 (0) | 2022.05.16 |
동기화 방법들 (0) | 2022.04.08 |
유저 모드에서의 스레드 동기화 (0) | 2022.03.29 |
윈도우OS의 시간 측정 함수 조사 (0) | 2022.03.28 |