- 메모리 관리가 필요한 이유를 파악한다.
- 주소 바인딩(Address Binding)에 대해 파악한다.
- Compile Time Binding
- Load Time Binding
- Run Time Binding
- MMU
- 연속 메모리 할당(Contiguous allocation)에 대해 파악한다.
- 단편화(Fragmentation)에 대해 파악한다.
- 내부 단편화 , 외부 단편화
- 단편화 해결 방법에 대해 파악한다.
- 연속 메모리 할당
- 메모리 압축(Compaction) : First fit , Best Fit , Worst Fit
- Paging
- Segmentation
각 프로세스는 독립된 메모리 공간을 갖는다는 것을 배웠다.
따라서, Multi Programming 환경에서 한정된 메모리 공간을 효율적으로 사용하는 것이 중요하다.
- Binding : 논리적 주소와 물리적 주소를 mapping 하는 것
- 논리적 주소 : CPU에 의해 생성된 가상 주소
- 물리적 주소 : 논리적 주소에 대응되는 메모리 공간에서의 위치
Compile Time Binding
- Compile Time Binding : 메모리 주소가 compile 시에 결정된다.
즉, 논리적 주소가 곧 물리적 주소가 된다.- 단점 : 현재 컴퓨터 상황을 파악하지 않고 물리적 주소를 사용하게 되면,
다른 프로세스가 할당되기 어려울 수 있다.
Load Time Binding
- Load Time Binding : 프로세스가 실행될 때, 로딩되는 위치에 따라 물리적 주소가 결정된다.
- 단점 : 실행 시마다 mapping을 하게되면, 메모리를 로딩할 때 시간이 오래 걸린다.
Run Time Binding
- Run Time Binding : 실행 후에도 물리적 주소가 변경될 수 있다.
CPU가 주소를 참조할때마다, mapping table을 확인해 binding한다.
이때, 코드 명령어를 저장하는 segment 계산은 MMU가 담당한다.
- MMU (Memory Management Unit) :
논리적 주소를 물리적 주소로 변환해주는 하드웨어 장치이다.
기준 Register(relocation register , limit register)의 값과 논리적 주소의 연산을 통해 binding한다.
논리적 주소가 연속적이면, 물리적 주소도 연속적으로 할당한다.
- 밑에서 설명할 Fragmentation 문제를 낳게된다.
- Fragmentation : 메모리 상에 공간이 남아있음에도, 공간이 흩어져있어 새로운 프로세스가 할당될 수 없는 상태
- 내부 단편화 : 남은 메모리 공간이 너무 작아 새로운 프로세스를 할당할 수 없는 상태
- 외부 단편화 : 메모리가 해제되어 빈 메모리 공간이 있음에도, 새로운 프로세스를 할당할 수 없는 상태
메모리 압축 (Compaction)
- Compaction : 메모리의 빈 공간을 연속적인 공간으로 만든다.
- 최초 적합(First fit) : 가장 먼저 발견한 공간에 메모리를 배치한다.
- 최고 적합(Best fit) : 빈 공간의 크기와 프로세스의 크기의 차가 가장 적은 곳에 배치한다.
- 최악 적합(Worst fit) : 빈 공간의 크기와 프로세스의 크기의 차가 가장 큰 곳에 배치한다.
- 단점 : 메모리를 이동하는 과정에서 오버헤드가 일어날 가능성이 높다.
Paging
- Paging : 메모리 공간이 연속적일 필요는 없다는 생각에 기인하여,
논리적 주소는 page, 물리적 주소는 frame으로 쪼개어 mapping 한다.
이때, page와 frame은 크기가 동일하다.
- 단점 : 내부 단편화가 증가한다.
Segmentation
- Segmentation : 논리적 주소와 물리적 주소를 서로 다른 크기의 segment로 분할하여,
segment table의 변수(Base : 시작 위치,Limit : segment 길이)를 참조해 mapping 한다.
- 단점 : 외부 단편화가 증가한다.
인터넷
인터넷 작동 원리HTTP란?브라우저 동작 원리DNS 작동 원리도메인 네임이란?호스팅이란?
기본적인 프론트엔드 지식HTMLCSSJavaScript
OS 및 일반적인 지식터미널 사용방법OS 작동 방식프로세스 관리스레드와 동시성기본적인 터미널 명령어메모리 관리- 프로세스간 통신 (IPC)
- 입출력 관리
- POSIX 기초
- 기본적인 네트워크 개념
버전 관리- Git 기본 사용법
DataBase- PostgreSQL (변경 가능성 있음)
- MongoDB
DataBase 상세 정보- ORM
- ACID
- Transaction
- N + 1 Problem
- DataBase 정규화
- Index와 작동 방식
API- 인증
- REST
- JSON APIs
캐싱- CDN
- Server side
- Client side
웹 보안 지식- MD5, SHA family, scyrpt, bcrypt
- HTTPS, CORS, SSL/TL, 보안 정책
Testing- 통합 테스트
- 단위 테스트
- 기능 테스트
- CI/CD
개발과 설계 원칙- SOLID
- KISS
- YAGNI
- DRY
아키텍처 패턴- 모놀로틱 앱
- 마이크로서비스
- SQA
- Serverless
검색 엔진- ElasticSearch
메세지 브로커- RabbitMQ, Kafka
컨테이너화 vs 가상화- Docker
GraphQL- Apollo
- 웹 소켓
- 웹 서버
확장성- 측정, 모니터링, 원격측정
- 마이그레이션 전략
- 수평적 확장 vs 수직적 확장
- 관찰 가능성을 고려한 확장
https://resilient-923.tistory.com/381
https://resilient-923.tistory.com/390
d와.. 정말 꼼꼼하게 공부하셨네요 본받겠습니다!!