Skip to content

Commit

Permalink
Merge pull request #3 from SSUMC-6th/randy/#1
Browse files Browse the repository at this point in the history
[randy] Chapter 1. 서버란 무엇인가(소켓&멀티 프로세스)
  • Loading branch information
Jangwon0319 authored Apr 11, 2024
2 parents 305efde + e529c52 commit 7d9f62c
Show file tree
Hide file tree
Showing 2 changed files with 196 additions and 0 deletions.
196 changes: 196 additions & 0 deletions docs/chapter1/Ch01Keyword.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,196 @@
# Chapter 1. 서버란 무엇인가

## 🔍 미리 알아둬야 할 선행 내용

### 1. 시스템 콜

- ✅ 개념
운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다.

<br>

- ✅ 특징
- 시스템 콜은 여러 종류의 기능으로 나누어진다.

- 시스템 콜 인터페이스는 시스템 콜 번호와 시스템 콜 핸들러 함수 주소로 구성되는 시스템 콜 테이블을 유지한다.

- 운영체제는 자신의 커널 영역에서 해당 인덱스가 가리키는 주소에 저장되어 있는 루틴을 수행한다.

- 작업이 완료되면 CPU에게 인터럽트를 발생시켜 수행이 완료 되었음을 알린다.



- ✅ 유형
- 프로세스 컨트롤 / 파일 매니지먼트 / 디바이스 매니지먼트 / 정보 관리/ 통신 / 보안

<br>

### 2. 프로세스와 스레드

- ✅ 프로세스 (Process)란?
- 실행중에 있는 프로그램 / 운영체제로부터 지원을 할당받은 작업의 단위

- ✅ 프로세스의 상태
- Running : CPU를 잡고 instruction을 수행중인 상태
- Ready : CPU를 기다리는 상태
- Blocked : CPU을 주어도 당장 instructin을 수행할 수 없는 상태
- New : 디스크에서 메모리로 프로그램이 올라가 실행준비를 하는 상태
- Terminated : 수행이 끝난 상태

- ✅ PCB (Process Control Block)
- 운영체제가 프로세스를 표현한 자료구조

- ✅ 문맥교환 (Context Switch)
- 하나의 프로세스가 이미 CPU 를 사용중인 상태에서 다른 프로세스가 CPU 를 사용하기 위해 이전 프로세스의 상태를 저장하고 새로운 프로세스의 상태를 적재하는 것

- ✅ 스레드 (Thread)
- 스레드는 프로세스와 다르게 스레드 간 메모리를 공유하며 작동한다

- ✅ 프로세스와 스레드의 차이점
- 프로세스 : 다른 프로세스의 변수나 자료에 접근할 수 없다.
- 스레드 : 별도의 스택을 가지고 있지만 힙 메모리는 서로 읽고 슬 수 있게 된다.

<br>

### 3. TCP / UDP 차이
- ✅ TCP(Transmission Control Protocl)
- 연결형 서비스 / 흐름제어 / 혼잡제어 / 신뢰성이 높은 전송 / 전이중, 점대점 방식

- ✅ UDP(User Datagram Protocol)
- 비연결형 프로토콜 / 데이터 경계 구분 / 비신뢰성 있는 데이터 전송 / 일대일. 다대다 통신

<br>

### 4. OSI 7계층과 TCP/IP 4계층 모델

- ✅ OSI 7계층
- 응용 계층(7) : 웹 서비스의 UI부분, 사용자의 입출력을 담당
- 표현 계층(6) : 계층 간 데이터를 적절히 표현하는 부분을 담당
- 세션 계층(5) : 통신 세션 구성
- 전송 계층(4) : 컴퓨터로 들어온 네트워크 데이터를 어느 포트로 보낼지 담당
- 네트워크 계층(3) : IP주소를 사용하여 네트워크 데이터를 어느 컴퓨터로 보낼지 담당
- 데이터 링크 계층(2) : MAC 주소를 사용해 네트워크 데이터를 어느 컴퓨터로 보낼지 담당
- 물리 계층(1) : 디지털 데이터를 아날로그적인 전기적 신호로 변환하여 네트워크 전선에 흘려보냄.

- ✅ TCP/IP 4계층 모델
- 응용 계층(4) : HTTP, Telent, SSH, FTP와 같은 프로토콜이 여기에서 사용
- 전송 계층(3) : 프로세스 간의 신뢰성 있는 데이터 전송을 담당
- 인터넷 계층(2) : OSI 7계층 모델의 3(네트워크) 계층과 같다. 컴퓨터 간 라우팅을 담당
- 네트워크 인터페이스 계층(1) : 네트워크 통신의 물리적인 부분들을 주로 포함

---

## ✏️ 하드웨어 인터럽트

- ✅ 인터럽트란?
- CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요할 경우에 마이크로프로세서에게 알려 처리할 수 있도록 하는 것을 말함,

- 하는 이유 : 입출력 연산이 CPU 명령 수행속도보다 느리기 때문

- 🎈 하드웨어 인터럽트<br>
: 하드웨어가 발생시키는 인터럽트로, CPU가 아닌 다른 하드웨어 장치가 cpu에 어떤 사실을 알려주거나 cpu 서비스를 요청해야 할 경우 발생

---

## ✏️ 리눅스 파일과 파일 디스크립터

- ✅ 파일 디스크립터
- 개념 : 프로세스에서 특정 파일에 접근할 때 사용하는 추상적인 값
- 파일 디스크럽터는 일반적으로 0이 아닌 정수값을 갖는다.
- 프로세스가 실행 중에 파일을 Open하면 커널은 해당 프로세스의 파일 디스크립터 숫자 중 사용하지 않는 가장 작은 값을 할당해준다
- 그 다음 프로세스가 열려있는 파일에 시스템 콜을 이용해서 접근할 때, 파일 디스크립터(FD)값을 이용해서 파일을 지칭

---

## ✏️ socket() 시스템 콜

- ✅ socket(domain, type, protocol);
- domain : IPv6, IPv6 중 무엇을 사용할지 결정
- type : stream, datagram 소켓 중 선택
- protocol : 0, 6, 17 중 0을 넣으면 시스템이 프로토콜 선택, 6이면 tcp, 17이면 udp

<br>

- 🔍 socket()의 리턴 값은 파일 디스크립터이다.
- 🎈 파일 디스크립터가 소켓의 파일 디스크립터인 경우 송수신 동작을 함
- ➡️ socket() 시스템 콜은 domain, prtocol을 사용하는 틀을 만들어는 것

---

## ✏️ bind() 시스템 콜

- ✅ bind(sockfd, sockaddr, socklen_t);
- sockfd : 바인딩을 할 소켓의 파일 디스크립터
- sockaddr : 소켓에 바인딩 할 아이피 주소, 포트번호를 담는 구조체
- socklen_t : 위 구조체의 메모리 크기

<br>

- 생성한 소켓에 실제 아이피 주소와 포트번호를 부여하는 시스템 콜
- 서버에서만 사용!

---

## ✏️ listen() 시스템 콜

- ✅ listen(sockfd, backlog)
- sockfd : 소켓의 파일 디스크립터
- backlog : 연결요청을 받아줄 크기 = TCP 백로그 큐의 크기

<br>

- 시스템 콜에서 설정하는 backlog가 TCP에서의 backlog queue의 크기이다.
- lient가 클라이언트 소켓을 통해 처음으로 서버에 요청을 하여 백로그 큐에 들어갈 때 syn 요청을 보내게 됨.

---

## ✏️ accept() 시스템 콜

- ✅ int accept(sockfd, sockaddr, socklen_t)
- sockfd : 백로그 큐의 요청을 받아들이기 위한 소켓의 파일 디스크립터
- sockaddr : 선입선출로 빼온 연결 요청에서 알아낸 클라이언트의 주소 정보
- socklen_t : 위 구조체의 메모리 크기

<br>

- backlog queue에서 syn을 보내와 대기 중인 요청을 선입선출로 하나씩 연결에 대한 수립을 해줌.
- 🔍 TCP 3 -way handshake
- 클라이언트와 서버간에 서로 신뢰성있는 통신을 위한 과정
- 새로 만든 소켓은 데이터 송수신을 담당함 (자식 소켓), 응답후 exit(0)으로 종료
- 부모 소켓은 연결 요청만 받아서 자식소켓으로 넘김 → 병렬처리

---

## ✏️ 멀티 프로세스와 멀티 스레드

- ✅ 멀티 프로세스
- 개념 : 두개 이상 다수의 프로세서가 협력적으로 하나 이상의 작업을 동시에 처리(병렬처리)
- 장점
- 독립된 구조로 안정성 높음
- 다른 프로세스에 영향을 주지 않아, 문제 발생 확률이 낮음
- 문제점
- 작업량이 많을 수록 오버헤드 발생

- ✅ 멀티 스레드
- 개념 : 하나의 프로세스에 여러 스레드로 자원을 공유하며 작업을 나누어 수행
- 장점
- 시스템 자원소모 감소
- 시스템 처리율 향상
- 문제점
- 하나의 스레드에 문제가 생기면 전체 프로세스에 영향
- 자원을 공유하기에 동기화 문제 발생 가능성
- 동시성 문제

---

## ✏️ 병렬 처리

- ✅ 병렬 시스템(Parallel System)
- 개념 : 다중 프로세스 시스템으로 2개 이상의 CPU가 각자 맡은 역할을 수행
- 구조
- 대칭 구조 : 각각의 프로세서가 동일한 운영체제 사본을 가지고 수행
- 비대칭 구조 : 각각의 프로세서가 각자의 역할이 존재한다.




Empty file added docs/chapter1/Ch01Keyword.txt
Empty file.

0 comments on commit 7d9f62c

Please sign in to comment.