Computer Science(50)
-
Protocol Stack - Data Link Layer
Overview Physical Layer를 다룬 이전 포스팅에 이어 이번 포스팅에서는 Data Link Layer를 다뤄보려 합니다. Signal Element의 형태로 수신자에게 들어온 신호는 Physical Layer를 통해 "011010"과 같은 비트 스트림으로 변환됩니다. (특정 매체의 경우 Forward Error Correction을 거쳐서 어느 정도 보정된 데이터를 올려 보내기도 합니다.) 이 데이터는 Data Link Layer로 전달되어 프레임의 단위로 해석됩니다. Data Link Layer는 이 프레임을 온전한 형태로 안전하게 상위 레이어(대개 Internet Layer)로 전달하는 역할을 합니다. This layer is concerned with access to and rout..
2023.05.05 -
Protocol Stack - Physical Layer
Overview 클라이언트에서 서버로 데이터를 전송한다고 했을 때, Application에서 전송하는 데이터는 JSON 객체이거나 protocol buffer와 같은 메시지인 것처럼 보이지만, 실제로 이 데이터는 더 작은 데이터들로 쪼개져 네트워크의 여러 추상화 계층을 거쳐 물리적 매체를 통해 아날로그 시그널의 형태로 전달됩니다. 보통 웹 애플리케이션을 개발할 때는 Application Layer만 이해하고 있어도 큰 문제가 없지만, 개인적으로 한국에서 미국으로 json 객체를 보낼 때, 혹은 파일을 업로드하거나 다운로드할 때 이 데이터들이 어떤 형태로 어떤 과정을 거쳐 전달되는지, 그리고 중간에 에러가 발생했을 때 어떻게 이를 처리하는지를 이해하고 싶었습니다. 또한 단순히 애플리케이션 개발을 위한 지식..
2023.04.29 -
리눅스 쉘은 어떻게 동작하는가 (brief explanation)
Overview 개발하면서 자주 사용하게 되는 Shell 프로그램에는 Computer Science의 근간을 이루는 Process, Fork, I/O Redirection, File, Pipe, Signal 등의 중요한 개념들이 모두 포함되며, 이들의 논리적인 상호작용을 통해 사용자의 입력을 수행하고 결과를 출력합니다. 이들 각각의 요소와 Shell 프로그램의 코드를 하나씩 살펴보는 것은 하나의 포스팅에서 다 다루기 어려울 정도로 내용이 많기 때문에 이번 포스팅에서는 Shell 프로그램의 구체적인 구현 사항을 살펴보기보다는 Shell 프로그램이 동작하는 전반적인 그림에 대한 간략한 소개를 하려고 합니다. Shell을 이해하기 위해서는 앞서 언급했던 여러 Computer Science의 핵심 개념들을 이해..
2022.11.26 -
[Process Synchronization] Overview
Background 현대의 컴퓨터 프로세스들은 다중 코어, 다중 프로세스, 다중 스레드 방식 등을 통해 여러 명령들(instruction lines)이 병행하게, 혹은 병렬로 실행될 수 있습니다. 하나의 CPU에서 스케줄링 없이 각각의 프로세스를 sychronized 한 방식으로 처리한다면 아무런 문제가 없겠지만, 이러한 방식은 답답한 UX를 만들고, 프로그램의 성능을 떨어뜨리는 결과를 가져옵니다. (최신의 노트북은 적어도 4개~8개의 CPU 코어를 가지고 있습니다.) 이렇게 여러 개의 코어에서 여러 프로세스들이 스케줄되어 실행되기 때문에 현대의 컴퓨터는 우수한 성능을 낼 수 있지만, Process Scheduling, Shared Memory 등등 여러 가지 복잡한 사항들을 고려해야 합니다. 이번 포스..
2021.04.03 -
[백준 2188 | 포드-풀커슨] 축사 배정
풀이 소와 축사와의 관계를 네트워크 그래프로 정의하는 것이 핵심이 되는 문제였습니다. 가장 많은 축사가 채워지는 것을 Source와 Dest간의 최대 유량을 결정하는 문제로 바꾸어주면 포드-풀커슨 알고리즘을 통해 이 문제를 쉽게 해결할 수 있습니다. 아래 그림과 같이 Source에서 모든 Cow로 가는 간선이 있다고 하겠습니다. (아래 그림에서의 모든 간선의 가중치는 1이 됩니다.) Cow는 선호하는 Cage로 간선을 그릴 수 있으며 Source로부터 들어오는 Cow의 유량은 1이 되므로 여러 Cage로 가는 간선이 있다고 해도 결국에는 하나의 Cage밖에 선택할 수 없게 됩니다. 모든 Cage는 각각 Dest로 가는 가중치 1짜리 간선이 있습니다. 이 그래프에 따르면 가장 많은 우리가 채워지는 경우 =..
2020.07.08 -
[백준 6086 | 포드 풀커슨] 최대 유량
풀이 네트워크 유량과 관련된 기본적인 문제로, BFS를 사용하는 포드-풀커슨 알고리즘을 사용하여 구현하였습니다. 포드-풀커슨 알고리즘을 사용하여 이 문제를 해결 할 때의 주의점은, 파이프가 양쪽 모두로 물을 흘려보낼 수 있으므로, 파이프 하나를 양방향 간선으로 취급해야 한다는 점과, 동일한 파이프가 2개 이상 주어질 수 있다는 점입니다. 즉, A->B로 가는 용량 5짜리 파이프와 용량 2짜리 파이프가 동시에 입력될 수 있는데, 둘 중 어느 하나를 선택하는 것이 아니라 두 용량 모두를 더한 것이 A->B로 가는 파이프의 최종 용량이라는 것입니다. 소스 코드 (JAVA) import java.util.*; import java.io.*; /* @sckimynwa */ public class BOJ_6086 ..
2020.07.07