thumbnail

📚 CS

📚 CS/네트워크

[네트워크] TCP/IP와 OSI 계층

올해 초 CS 전공지식 도서를 읽으면서 TCP/IP 계층 모델과 OSI에 대해 정리한 적이 있다. 아무래도 책 자체가 전반적인 전문지식에 대한 요약본이다 보니, 다소 얕게 배우고 넘어갔던 기억이 있다. 워낙 중요한 내용들이기도 하고, 좀 더 정확하게 알고 있는 게 좋을 듯 하여 다시 정리해보려 한다. 선수지식 IP (인터넷 프로토콜) 지정한 IP주소에 데이터의 조각들을 패킷이라는 단위로 목적지까지 전송하는 역할을 하는 규약. 전송에만 목적을 두기 때문에 빠르지만 도중에 패킷이 유실되거나 순서가 꼬이는 문제가 발생할 수 있다. 이를 비연결성, 비신뢰성이라고 한다. TCP (전송제어 프로토콜) 패킷 데이터의 전달을 보증하고, 보낸 순서대로 받게 해준다. 도착한 패킷들을 점검하여 문제가 있는 부분은 재요청하는..

📚 CS/네트워크

[MDN] HTTP (2) : CORS

Mdn web docs - CORS를 통해 학습한 내용을 정리한 글입니다. 이전 글과 이어집니다. CORS CORS(Cross-Origin Resource Sharing, 교차 출처 리소스 공유)란 HTTP 헤더를 이용하여 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처(도메인, 프로토콜, 포트)의 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제이다. 기본적으로 브라우저는 스크립트에서 시작한 교차 요청을 제한한다. 이러한 규약을 동일 출처 정책이라 하며, XMLHttpRequest나 Fetch API가 이를 따른다. 이 외에도 CSS 내에서 @font-face를 통해 사용하는 웹 폰트나, WebGL 등이 있다. 다른 출처의 리소스를 정상적으로 받아오기 위해서는, 그 출처에서 올바른..

📚 CS/네트워크

[MDN] HTTP (1) : 발전 흐름과 연결 관리

Mdn web docs - HTTP를 통해 학습한 내용을 정리한 글입니다. 개요 HTTP(하이퍼텍스트 전송 프로토콜)은 HTML과 같은 하이퍼미디어 문서를 전송하기 위한 애플리케이션 계층 프로토콜이다. 클라이언트의 요청에 따라 통신하는 클라이언트-서버 모델을 따르며, 이전 요청의 세션 상태를 유지하지 않는 Stateless 프로토콜이다. * 애플리케이션 계층 통신 네트워크에서 호스트가 사용하는 트로토콜과 인터페이스 방법을 지정하는 추상화 계층 * 프로토콜 컴퓨터 내부 혹은 컴퓨터 간 데이터의 교환 방식을 정의하는 규칙 체계 집합 * Stateless 동일한 연결 상에서 발생한 두 개의 요청 사이에 연결고리가 없음을 말한다. 쿠키를 통해 동일한 상태를 공유하는 세션을 생성한할 수 있다. 프록시 브라우저(클..

📚 CS/운영체제

[OS] 프로세스 레지던트 셋과 프로세스 스케줄링 (Resident Set, Process Scheduling)

레지전트 셋이란, 메모리에 들어와있는 프로세스 페이지 정보들의 집합을 말한다. 또한 페이지의 갯수를 레지던트 셋 사이즈라 하는데, 이 사이즈를 규정하는 서로 다른 방법에 대해 알아보려 한다. Process Resident Set 레지던트 셋 사이즈를 결정하는 기준 Fixed allocation : 할당해주는 메모리 프레임의 수를 고정시킨다. 페이지 폴트가 발생하여 제거될 페이지를 선별해야 할 때, 자신이 갖고 있는 페이지 중에서 선택하는 Local Scope 영역에서 Replacement가 처리된다. Variable allocation : 할당해주는 메모리 프레임의 수를 유동적으로 결정한다. 해당 방법은 Replacement 처리 시 Local Scope와 Global Scope 영역 모두에서 사용된다...

📚 CS/알고리즘 (JS)

[알고리즘] 동적 프로그래밍 (자바스크립트)

DP 동적 프로그래밍이란 복잡한 문제를 더 간단한 하위 문제의 모음으로 쪼갠 후, 각 하위 문제들을 풀어 그 답을 저장하여 문제를 해결하는 문제 해결 방식을 말한다. 적용 가능한 문제 영역이 그리 넓지 않지만, 적용 가능한 경우에는 성능에 있어 아주 큰 차이를 가져온다. 두 가지 특성 Overlapping Subproblems : 한 문제를 더 작은 문제들로 나눌 수 있고, 그 조각들 중 일부가 재활용 가능해야 한다. Optimal Substructure : 하위 문제의 최적 해답을 통하여 더 큰 범주를 갖는 문제의 최적 해답을 구성할 수 있어야 한다. 재귀를 통한 구현 : 피보나치 수열 수열의 첫 번째 숫자와 두 번째 숫자는 1이며, 그 밖의 경우 Fib(n) = Fib(n-1) + FIb(n-2)이다..

📚 CS/알고리즘 (JS)

[알고리즘] 다익스트라 최단 경로 알고리즘 (자바스크립트)

SLAM 과목에서 이동체의 경로를 맵핑할 때 스쳐 배웠던 경험이 있다. 다익스트라 알고리즘은 두 정점 사이에 존재하는 최단 경로를 찾는 알고리즘이다. 그래프 구조로 이루어져 있고, 이진 힙을 사용한 우선순위 큐로 작동한다. 실생활에서 굉장히 빈번하게 사용되고 있는 알고리즘이다. 다익스트라 알고리즘 가중 그래프 다익스트라 알고리즘을 구현하기 전에 가중치 그래프를 먼저 소개하려 한다. 그래프의 정점들에 대해 가중치를 부여해 경로의 상대적인 길이를 알 수 있다. 일반적으로 구현했던 그래프의 연결 관계를 담는 키-값 객체에서 가중치가 추가로 매겨지게 된다. 시작점을 지정, 방문하여 다음 이동할 노드를 결정해야 한다. 이 때, 가장 작은 거리 가중치를 가진 노드를 선택한다. 다음 노드로 이동한 후, 그 노드의 인..

📚 CS/운영체제

[OS] 다계층 페이지 테이블과 TLB, 페이지 교체 작업

지난 시간 페이징 방식에 기반한 가상 메모리 기술인 디멘드 페이징에 대하여 학습하였다. 해당 방법론은 프로세스 크기에 비례하여 페이지 테이블 또한 커지는 문제가 발생하였는데, 이를 해결할 방법을 학습하고자 한다. 다계층 페이지 테이블 페이지 테이블 크기 문제를 해결하는 방법 4Kbyte 페이지에 4바이트 엔트리가 1,024개 담긴다. 코드가 많아지면 그에 따라 페이지 테이블을 담고 있는 엔트리도 증가하게 되고, 하나의 페이지에 담기지 않게 된다. 이 많은 양의 엔트리들을 페이지에 논리적으로 분배하기 위한 방법이 존재한다. 첫 번째는 멀티 레벨 페이지 테이블로, 계층적 특성(Hierarchical)을 가진다. 두 번째 방법으로는 Inverted 페이지 테이블이 있는데 성능 이슈로 요즘은 잘 사용하지 않는다..

📚 CS/알고리즘 (JS)

[알고리즘] 그래프 순회 (자바스크립트)

그래프 순회와 노드 탐색 그래프 순회를 구현하기 위해서는 일반적인 트리 순회와 달리 루트가 존재하지 않기 때문에, 시작점을 정해주어야 한다. 또한 여러 순서가 존재할 수 있고, 이미 방문했던 노드를 다시 방문하거나 뒤로 돌아가야 하는 경우가 있을 수 있다. 해당 차이점을 제외하고는 트리 순회에서와 마찬가지로 BFS, DFS, 재귀형과 순환형을 통해 구현한다. 웹 크롤링, 최단거리 추천, 미로찾기, GPS 네비게이션 등에서 그래프 순회가 사용된다. 실생활과 굉장히 밀접한 알고리즘이다. 깊이 우선 그래프 순회 (DFS) 이전에 학습했던 트리 구조에서의 깊이 우선 그래프 순회를 간단히 정리하자면, 형제트리를 방문하기 전에 자식 노드를 먼저 방문하는 것을 말한다. 유방향 그래프를 기준 깊이 우선 그래프에서는 ..

📚 CS/운영체제

[OS] 가상 메모리와 디멘드 페이징 (Virtual Memory, Demand Paging)

가상 메모리 페이징 이후의 메모리 관리 방법으로, 프로세스의 일부만 물리적 메모리에 저장하고, 나머지는 가상 메모리에 저장하여 필요할 때만 호출하여 사용하는 동적 메모리 관리법을 말한다. 보조기억장치에 가상 메모리 공간을 만들어, 프로세스 원본을 저장하고 직접적인 실행에 필요한 Instruction들만 메인메모리에서 실행시키켜 공간 효율 측면에서 굉장히 뛰어나다. 메모리 분류 실제 메모리 (Real memory) 주기억장치 주소 정보 (=real address, physical address, absolute address) 가상 메모리 (Virtual memory) 보조기억장치 가장 주소 공간 (=logical address, virtual address) 그러나 처리 과정에서 수시로 보조기억장치에 접..

📚 CS/운영체제

[OS] 주소 바인딩과 페이징, 세그먼테이션 (Address Binding, Paging and Segmentation)

주소 바인딩 주소 바인딩이란, Instruction이나 Data의 Physical Address를 결정하는 것을 말한다. 바인딩이 일어나는 시점에 따라 Compile Binding, Loading Binding, Execute Binding으로 분류할 수 있다. Compile Binding 프로그램 작성 후 소스코드를 바이너리코드로 변환하는 시점에 바인딩하는 것을 말한다. 프로세스 시작 지점($BA, 상대주소)을 100으로 지정해주고 컴파일 스캔 과정에서 계산한 코드의 길이에 따라 다음 변수의 절대 주소를 지정해준다. (I -> $BA + 406) Code Relocation 시 충돌로 인하여 명령어들이 꼬이게 된다. Load Time 실제로 메인 메모리에 데이터를 넣는 로딩 과정에서, 운영체제가 물리적..

재웅 Jaewoong
'📚 CS' 카테고리의 글 목록