Jungle 64

[TIL] WEB RTC 구현 기록 - FE

나만무 프로젝트를 진행하면서 webRTC를 이용하여 음성채팅 기능을 구현하기 위해 공부했다. 프로젝트에서 백엔드 개발을 담당했지만, webRTC를 활용하여 음성채팅을 기능화하기 위해 프론트 작성도 담당하기 위해 따로 공부했다. 리액트에서 발생하는 버그들을 고치기 위해 javascript에서의 리액트 마운트 순서를 공부했고, 리액트 훅의 사용법과 상하위 컴포넌트간의 관계에 대해 공부했다. 이 기능이 가능할 수 있게 해주는 원리에 대해 머리속에 복잡한 내용을 A4용지에 쓰던걸 여기에 적도록 하겠다. WEB RTC 란? WEBRTC는 기본적으로 서버가 중간에 개입하지 않고 peerTopeer로 연결하여 음성 채팅과 같은 스트림 전송을 수행할 수 있게 한다. 이를 위해선 Peer - Peer가 서로의 웹 세팅,..

Jungle 2024.02.29

MP3 음성 파일의 압축 방법

MP3 : MP3는 가장 대표적인 압축 샘플링 사운드 파일이다. MP3는 동영상과 오디오 압축 기술에 대한 표준인 MPEG(Moving Picture Experts Group) 표준의 일부분으로 정확한 명칭은 MPEG Audio Layer 3이다. MPEG Audio Layer 1, Layer2도 있다. Layer 1은 압축률이 1/4정도 되고 Layer2는 1/6 ~ 1/8 정도 된다. MP3 파일은 CD 음질을 유지하면서도 1/10 ~ 1/12의 높은 압축률을 가진다는 것이 가장 큰 특징이다. MP3 파일은 대략 1분당 1메가의 크기를 필요로 하는데 이처럼 높은 압축률 때문에 인터넷을 통해 급속도로 보급될 수 있었다. 파일 크기가 작기 때문에 적용 용량의 메모리에도 다수의 노래를 저장할 수 있게 되어..

Jungle 2024.01.13

[TIL] 리버스 프록시(Reverse Proxy) 개념

백엔드와 프론트엔드, DB를 각각 어떻게 서버로 연결할지에 대한 개요를 짜다가 예전 프로젝트 때, 개발에 진심이셨던(?) 컴퓨터 공학과 박사님이 추천해준 방식인 프론트서버와 백엔드 서버를 NGINX 리버스 프록시에 넣어 연결하는 방식이 생각났다. 그때는 리버스 프록시에 대한 개념이 너무 어려워서 그냥 DB 백,프론트 서버를 한꺼번에 한 서버에 넣어 돌렸었는데 이번에 제대로 한번 공부해서 적용해보자고 다짐하며 리버스 프록시에 대한 개념에 대해 공부하게 되었다. 그래서 오늘은 Nginx의 리버스 프록시 개념과 그 사용법에 대해 공부해보고 이에 관해 포스팅해보겠다. 리버스 프록시 란? 리버스 프록시란 클라이언트 요청을 대신 받아 내부 서버로 전달해주는 방식을 말한다. 이 프록시는 대리자의 의미를 가지는데, 정..

Jungle 2023.12.30

[TIL] pintos : 가상 메모리 구현 (2) - fork , mmap , swap

이전 포스팅을 통해 uninit 유형의 페이지를 생성하여 spt에 넣어 놓은 뒤 page_fault가 발생하여 demanding 될 경우 page를 할당해주는 lazy loading 의 진행 과정을 살펴보았다. 오늘은 lazy loading에서 추가되어 필요한 fork의 추가 작업과 mmap 메모리 매핑 페이지 시스템콜을 구현한 것과 마지막으로 swap disk을 활용하여 물리 메모리로부터 퇴거와 복귀를 하는 작업에 대해 살펴보겠다. Fork 추가 작업 이전엔 물리 메모리가 가상화되어 있지 않았으므로 그저 pml4를 전체 탐색하여 모든 페이지를 자식에게 복사해주기만 하면 되었지만 이제는 spt 테이블을 통해 메모리를 가상화하였으므로 spt의 내용을 복제하고 유형별로 물리 메모리도 할당해주어야 한다. 그전..

Jungle 2023.12.29

[TIL] pintos : 가상 메모리 구현 (1) - lazy loading

오늘로서 핀토스 운영체제를 마쳤다. 핀토스를 하며 느낀점에 대해서는 다음 포스팅에 작성하겠다. (아마 매우 길어질 것 같아서) 이번 포스팅은 핀토스 운영체제 프로젝트의 지옥주 3주차인 가상 메모리 VM에 대해 작성하겠다. 구현하느라 바쁘게 달려온 오늘로 마무리된 2주의 기간동안 구현과 고민을 하는 순간 순간의 감정과 생각들의 기록을 전부 남겨보려고 한다. 좀 길어진다면 여러개의 포스팅으로 나누어 작성하겠다. 메모리 관리 처음 메모리 관리를 들어갔을 때 3일 정도 고민했던 사항이 바로 이 메모리 관리에 관해서이다. 깃북을 처음 읽었을 때, 다음처럼 spt(supplemental page table)이라는 것을 추가 구현해야 한다고 나와있었다. 지금까지 코드 상에서 pml4(page map level 4 :..

Jungle 2023.12.29

[TIL] pintos : mmap 트러블 슈팅

오늘은 하루를 쏟아 트러블 슈팅을 했던 mmap_unmap 테스트 케이스에 대해 다뤄보겠습니다. test : mmap_unmap 테스트 코드를 보면서 이야기 하겠습니다. 테스트가 무엇을 검증하려는 건지 주석에 이렇게 나와 있습니다. 페이지 공간을 mmap -> munmap 한뒤 mmap으로 매핑되었던 페이지 주소 공간이 munmap 이후 접근 불가능한지 확인합니다. 즉 mmap으로 매핑된 주소공간을 munmap 으로 매핑 해제한 뒤 이후에 접근하려 하면 fail되는지 확인하는 테스트 입니다. 테스트 코드를 다시 보겠습니다. sample.txt 파일은 '794 바이트' 입니다. 해당 파일을 열고 'ACTUAL'에 저장되어있는 가상 주소 '0x10000000' 공간에 sample.txt를 mmap으로 메모리..

Jungle 2023.12.26

[TIL] pintos : stack growth 지원하기

유저프로그램이나 커널에서 함수를 호출할 때는 런타임 스택에 인자들을 집어넣고 함수가 끝났을 때 복귀할 주소인 return address를 넣은 뒤 call function 어셈블리어를 통해 함수를 호출한다. 이때 런타임 스택도 페이지로 할당받아 사용하는 메모리 공간이다. 근데 만약 런타임 스택이 1개의 페이지 이상의 값을 채워넣어야 하는 상황이 발생하면 그때는 페이지를 추가로 요청해야 한다. 이 상황을 stack growth라고 한다. 그럼 왜 동적으로 stack을 할당해줄까? 미리 넓찍하게 스택을 할당해두면 다른 메모리 페이지를 할당할 용량이 줄어들어서 효율적이지 못하기 때문이다. 나는 stack growth를 지원해주기 위해서 사용자 혹은 커널이 stack을 추가로 할당하기를 원하는 정당한 page_..

Jungle 2023.12.23

[TIL] pintos : VM - fork uninit 시 aux도 복사해주기

https://songarden.tistory.com/71 [TIL] pintos : vm anon 페이지 구현 오늘도 어김없이 vm 코드를 개선해 나갈 예정이다. 1. hash table 접근 시 동기화 보장 The hash table does not do any internal synchronization. It is the caller's responsibility to synchronize calls to hash table functions. 깃북에 songarden.tistory.com 바로 이전 포스팅에서 fork도 구현을 마쳤다고 생각했는데, fork-read가 작동안되는 문제가 발생해서 디버깅을 진행했다. 이 문제에 대해 트러블 슈팅한 내용을 포스팅하겠다. 문제 상황 : 자식이 읽은 fi..

Jungle 2023.12.23

[TIL] pintos : vm anon 페이지 구현

오늘도 어김없이 vm 코드를 개선해 나갈 예정이다. 1. hash table 접근 시 동기화 보장 The hash table does not do any internal synchronization. It is the caller's responsibility to synchronize calls to hash table functions. 깃북에 적힌 해시 테이블에 대한 Synchronization에 관한 주의사항이다. 해시 테이블의 값을 찾는 행위는 동시에 진행되어도 문제 없지만 supplemental page table 을 삭제할 때, search & delete를 수행할 경우 동기화를 보장해야 한다. 따라서 semaphore를 spt 구조체 안에 선언하여 search & delete 시 동기화를 ..

Jungle 2023.12.22

[TIL] pintos : VM 시행착오 error 모음집

이번주부터 메모리 가상화를 구현하여 paging swap을 직접 수행하고 처리하는 작업을 시작했다. 코드를 진행하면서 이론을 3일정도 공부했다. 확실히 VM은 가상화가 너무 많아 이론을 머리속에 정리하기 어려웠다. 지금은 어떻게 해야할지 갈피를 잡았고 프로그램이 실행되는 프로세스에서 어떤 작업들을 해주어야 하는지 차근차근 생각하며 코드를 구현하고 있다. 이번 포스팅에서는 잘못 알고 있었던 것들과 사소한 잘못된 습관들 때문에 발생한 에러들을 하나씩 적으며 코딩하겠다. 1. 가상화했다고 struct 구조체까지 가상화해버림 메모리를 가상화해서 컴퓨터를 속여야 되는데 내 자신마저 속여서 코드까지 속였다. 메모리를 가상화한다는 것은 DRAM에 올라와있지 않은 메모리를 마치 올려놓은 것 처럼 속여놓고 실제로 그 D..

Jungle 2023.12.20