CS/OS

[운영체제/OS] 시스템 콜(System Call)에 대한 간단한 정리

1. 시스템 콜(System calls) 운영체제에 대한 첫 포스팅부터 계속 System Call에 대한 인터럽트를 이야기했는데요. 그래서 지금 대표적인 System Call에는 어떤 것들이 있는지 잠깐 짚어보려고 합니다. 1. fork() fork()는 새로운 프로세스를 생성하고, 프로세스 생성 요청을 보낸 프로세스(Calling Process)를 복제하는 시스템 콜입니다. 여기서 복제되는 프로세스를 Child, fork()를 수행하는 프로세스를 Parent라고 하는데요. fork()를 수행하게 되면 기본적으로 pid를 제외한 모든 내용이 동일하게 Child 프로세스에 복사됩니다. 또한, fork() 명령어 수행 시 Parent는 Child의 pid값을 리턴하고, child는 0을 리턴합니다. 그래서 ..

2021.09.23 게시됨

CS/Database

[데이터베이스/DB] 정규화에 대해서(2) - 제1,2,3 정규형과 BCNF

0. 들어가면서 이전 시간에 정규화는 함수적 종속성과 밀접한 관련이 있다고 했습니다. [데이터베이스/DB] 정규화에 대해서(1) - 이상(Anomaly)과 함수적 종속성(FD) 0. 오버뷰(Overview) 관계형 데이터베이스에서 설계 시 중복을 최소화하기 위해 데이터를 구조화하는 작업을 정규화(Normalization)라고 합니다. 정규화가 왜 필요한지에 대해 이야기하기 위해서, 아래 studyandwrite.tistory.com 릴레이션에는 여러 가지 속성들이 들어가있고, 정규화라는 것은 함수적 종속성을 이용해서 릴레이션을 연관성있게 구성하고 이상(Anomaly)을 없애는 과정이었죠. 정규화에는 크게 제1, 제2, 제3, BCNF 정규형이 있습니다. 각 정규형은 그 단계가 커질수록 그 이전 단계의 정..

2021.09.15 게시됨

CS/Database

[데이터베이스/DB] 정규화에 대해서(1) - 이상(Anomaly)과 함수적 종속성(FD)

0. 오버뷰(Overview) 관계형 데이터베이스에서 설계 시 중복을 최소화하기 위해 데이터를 구조화하는 작업을 정규화(Normalization)라고 합니다. 정규화가 왜 필요한지에 대해 이야기하기 위해서, 아래 간단한 예시를 보겠습니다. 학번 이름 단과대학 과목코드 중간 성적 2016000001 조성현 공과대학 CSE123 A 2016000002 김영희 상경대학 CSE124 B 2016000001 조성현 공과대학 CSE125 C 2016000003 이철수 문과대학 CSE126 F 위 표는 학번, 이름, 단과대학, 과목, 중간 성적을 저장하고 있는 하나의 데이터베이스 스키마입니다. 그리고 학번과 과목코드가 기본 키(Primary Key)로 역할을 하고 있습니다. 학번과 과목코드를 통해 중간 성적을 결정지..

2021.09.15 게시됨

CS/Network

[네트워크/Network] TCP는 어떻게 신뢰적인 데이터 전달을 할까?

👀 0. 들어가면서 이번 시간에는 트랜스포트 계층의 프로토콜은 TCP에 대해 이야기해보려고 합니다. UDP에 대한 정리는 아래 포스팅에 있으니 참고해주세요. [네트워크/Network] 비연결형 트랜스포트 UDP 정리 💡0. 들어가면서 이전 포스팅에서 OSI 7계층에 대해 정리를 했었는데요. 트랜스포트 계층의 기본적인 역할은 네트워크 계층과 애플리케이션 레벨 프로세스 간의 데이터를 넘겨주기 위해서 다중 studyandwrite.tistory.com 한편, TCP는 신뢰적인 데이터 전송, 혼잡 제어 등 여러가지 기능을 제공하는 프로토콜이기 때문에 설명할 내용이 굉장히 많습니다. 그래서 앞으로 몇 개의 포스팅에 걸쳐 이러한 내용들을 다뤄보도록 하겠습니다. 우선, 이번 포스팅에서는 TCP의 가장 기본적이면서도 ..

2021.09.13 게시됨

CS/Network

[네트워크/Network] 인터넷은 어떻게 URL 주소의 서버를 찾아갈까? - DNS의 동작 원리

💡 0. 문제 "내가 나인지 증명할 수 있는 방법은 무엇일까요? 가장 쉽게 떠올릴 수 있는 방법은 자신의 주민등록번호를 가지고 이야기하는 것입니다. 하지만 우리는 일상생활에서 자신을 표현할 때 "안녕하세요 저는 960918-1******" 입니다." 라고 표현하지는 않습니다. 복잡하기 때문이죠. 대신에 우리는 "안녕하세요, 저는 조성현입니다"라고 자신의 이름을 가지고 소개를 합니다. 인터넷도 마찬가지입니다. www.naver.com, www.google.com처럼 호스트 네임(Host name)을 통해 자신을 표현합니다. 하지만 우리 사회와는 다르게 문제가 하나 생깁니다. 그것은 바로, "네트워크 통신에서는 IP Address를 통해 인터넷의 위치에 대한 정보를 얻는데, 호스트 네임에는 IP Addres..

2021.09.10 게시됨

CS/Network

[네트워크/Network] 네트워크의 기본: OSI 계층 구조와 캡슐화

🤔 0. 개요 "OSI 7계층이 무엇인가요?" "컴퓨터 네트워크를 왜 7계층으로 나누나요?" "메시지, 데이터그램, 세그먼트의 차이와 캡슐화는 무엇인가요?" CS를 공부해본 사람이라면 한 번쯤은 OSI 7계층에 대해 들어보았을겁니다. 저 역시 전공 수업에서도 배웠고 인터넷에서도 많이 보았던 내용입니다. 하지만 7개의 계층을 외우려고만 했던 시기에 왜 OSI 7계층이 존재하는지, 어떤 모습으로 존재하는지에 대한 이해는 잠시 뒤로 미뤄뒀던 것 같습니다. 그래서 이번 기회에는 OSI 계층 구조, 그리고 이 맥락과 이어지는 캡슐화에 대한 내용에 대해 이해를 해보려고 합니다. (외우지 말고!) 아래는 [컴퓨터 네트워크 하향식 접근]이라는 전공 서적에 있는 그림입니다. 이 그림이 OSI의 계층 구조를 이해하기 쉽게..

2021.09.08 게시됨

CS/Network

[네트워크/Network] TCP 연결 관리와 2, 3, 4 Way Handshaking(핸드쉐이킹)에 대해

📋 1. 오버뷰(Overview) 아래 간략한 설명을 보면서 TCP 핸드셰이킹에 대해 감을 잡아보겠습니다. TCP는 애플리케이션 프로세스가 데이터를 다른 프로세스에게 보내기 전에, 두 프로세스가 서로 "핸드셰이크"를 먼저 해야 한다는 것에서부터 연결지향형(connection-oriented)이라는 특징을 갖고 있습니다. 한 호스트에서 동작하는 프로세스가 다른 호스트의 프로세스와 연결하고 싶다고 해볼까요? 이 때, 연결을 초기화하는 프로세스를 클라이언트 프로세스, 다른 프로세스를 서버 프로세스라고 하겠습니다. 클라이언트 애플리케이션 프로세스는 서버 측의 프로세스와 연결을 설정하기를 원한다고 TCP 클라이언트에게 먼저 말합니다. 그러면 첫번째 TCP 세그먼트를 통해 서버 측 프로세스에게 알림이 가겠죠. "A..

2021.09.08 게시됨

CS/Network

[네트워크/Network] http와 https는 뭐가 다른거야?(feat. SSL, TLS)

💡 0. 들어가면서 1990년대 초, 우리가 많이 들어본 월드 와이드 웹(WWW)이 등장했습니다. 월드 와이드 웹은 온-디맨드(On-demand) 방식으로 동작하면서, 사용자들이 원할 때 원하는 것을 수신할 수 있도록 해주었죠. 웹을 통해 사람들은 어떤 정보에 대해 쉽게 접근할 수 있게 되었고, 모든 사람이 매우 낮은 비용으로 웹에 컨텐츠를 퍼블리시할 수 있게 되었습니다. 또한 웹과 관련된 프로토콜은 유튜브, 웹-기반 이메일, 인스타그램 등 대부분의 모바일 인터넷 애플리케이션을 위한 플랫폼을 제공하게 되었습니다. 월드 와이드 웹에 대해서 더 깊게 설명하는 것은 잠시 미뤄두고, 다음의 세 가지 기능으로 월드 와이드 웹을 요약할 수 있을 것 같습니다. 첫 번째 통일된 웹 자원의 위치 지정 방법 예를 들면 U..

2021.09.06 게시됨

CS/OS

[운영체제/OS] 디스크 구조와 I/O 작업 스케줄링

💡0. 들어가면서 이전 포스팅까지 OS의 메모리 관리 기법에 대해 살펴봤습니다. 험난한 길이었습니다. 이번 시간부터는 OS가 어떻게 디스크를 탐색하는지에 대해 공부해보려고 하는데요. 먼저 구글에 '하드디스크'라고 검색해보면 아래와 같은 사진들을 보실 수 있습니다. 그렇다면 우리의 OS는 어떤 방식으로 디스크의 데이터를 읽고 저장할 수 있을까요? 📒 1. 디스크의 구조 아래는 일반적인 디스크의 구조입니다. 디스크는 크게 Cylinder, Platter, Track, Sector, Head로 구성되어 있습니다. Cylinder는 우리말로 원통이고 Platter는 평평한 원판을 의미하죠? 그래서 N장의 Platter를 겹쳐놓은 것을 Cylinder라고 하며, 각 Platter에 대해 Head가 존재하는 구조라..

2021.06.14 게시됨

CS/OS

[운영체제/OS] 프레임 할당(Frame allocation)과 Page fault 관련 기타 이슈들

📒 1. 프레임의 할당 이전의 많은 포스팅에서 가상 메모리의 관리는 애초에 물리적 메모리가 가상 메모리보다 훨씬 작기 때문에 필요한 개념이라고 말씀드렸는데요. 따라서 각 프로세스는 자신이 필요로 하는 "최소한의" 페이지만 사용하는 것이 합리적이라고 볼 수 있습니다. 그렇다면 각 프로세스는 얼마만큼의 프레임을 할당받아야 감당할만큼(?)의 페이지 폴트를 일으키면서 전체 프로세스가 원활하게 돌아갈 수 있을까요? 이 역시 명확한 기준은 없지만 크게 두 가지 방법이 존재합니다. ✅ 1) Local Replacement 이 방법은 프레임을 어떤 프로세스에게 고정 할당(Fixed Allocation)하는 개념에서 시작합니다. 애초에 프로세스 별로 할당된 프레임의 크기가 고정되어 있기 때문에, 페이지 폴트가 발생하면 ..

2021.06.14 게시됨