Skip to content

Commit

Permalink
Merge pull request #8 from SSUMC-6th/bany/#1
Browse files Browse the repository at this point in the history
[바니] Chapter 1. 서버란 무엇인가(소켓&멀티 프로세스)
  • Loading branch information
suuu0719 authored Apr 9, 2024
2 parents 765d46b + 3522d40 commit 8420388
Show file tree
Hide file tree
Showing 6 changed files with 80 additions and 8 deletions.
Binary file removed .DS_Store
Binary file not shown.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@

.DS_Store
Binary file removed docs/.DS_Store
Binary file not shown.
Binary file removed docs/chapter1/.DS_Store
Binary file not shown.
78 changes: 78 additions & 0 deletions docs/chapter1/Ch01Keyword.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
### TCP
transmission control protocol, 연결지향. 신뢰성. 순서대로. 일대일. 데이터 경계 구분x. 혼잡제어

### UDP
user datagram protocol, 비연결형. 데이터 경계 구분(datagram), 비신뢰성, 일대일. 일대다. 다대다 통신. 혼잡제어 지원x

### 시스템 콜?
사용자 프로그램이 특권 명령의 수행을 필요로 하는 경우(디스크 파일 접근, 화면에 결과 출력 등..) → 운영체제에게 특권 명령의 대행을 요청하는 것

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

### 하드웨어 인터럽트
- 인터럽트: CPU가 프로그램 실행하고 있을 때, 예외상황이 발생하여 처리가 필요한 경우에 마이크로프로세스에게 알려 처리할 수 있도록 하는 것
- 하드웨어 인터럽트: 하드웨어가 발생시키는 인터럽트, CPU가 아닌 다른 하드웨어장치가 cpu에 어떤 사실을 알려주거나 cpu서비스를 요청해야 할 경우에 발생시킴.

### 리눅스의 파일과 파일 디스크립터
- 파일 디스크립터: 리눅스/유닉스 계열의 시스템에서 프로세스가 파일을 다룰때 사용하는 개념. 프로세스에서 특정 파일에 접근할 때 사용하는 추상적인 값으로, 일반적으로 0이 아닌 정수값을 가짐
- 리눅스는 모든 것을 파일로 취급한다. 소켓도 파일로 취급한다. → 이 시스템에서 프로세스가 파일들에 접근할때 파일 디스크립터 개념을 사용한다.

### socket() 시스템 콜
소켓을 만드는 시스템콜 `socket(domain, type, protocol)`

리턴값은 파일디스크립터

파일 디스크립터가 소켓 파일 디스크립터이면 → 소켓에 데이터를 작성하거나 소켓의 데이터를 읽어들인다.

ipv4, ipv6, tcp, udp 중 무엇을 사용할지에 대한 틀을 만드는 시스템콜

### bind() 시스템 콜
생성한 소켓에 실제 ip주소와 포트번호를 부여하는 시스템콜 `bind(sockfd, sockaddr, socklen_t)`

클라이언트는 통신시 포트번호 자동 부여됨, bind 시스템콜은 서버에서만 사용

### listen() 시스템 콜
연결지향인 TCP에서만 사용. 파라미터로 받은 backlog의 크기만큼 backlog queue를 만드는 시스템 콜 `listen(sockfd, backlog)`

파라미터로 받은 파일디스크립터에 해당하는 소켓이 클라이언트 연결요청을 받아들임

서버에 들어오는 모든 클라이언트 요청은 backlog queue에 저장됨 (queue에서 요청 대기 중) → 서버에 요청해서 backlog queue로 들어갈때 syn 요청 보냄

### accept() 시스템 콜
queue에서 대기중인 클라이언트 요청을 수락하는 시스템 콜 `int accpet(sockfd, sockaddr, socklen_t)`

선입선출로 받아온 연결요청에서 클라이언트의 주소정보와 클라이언트 구조체의 메모리 크기를 받아와 새로운 소켓(자식소켓)을 만든다.

새로 만든 소켓은 데이터 송수신을 담당함 (자식 소켓), 응답후 exit(0)으로 종료

부모 소켓은 연결 요청만 받아서 자식소켓으로 넘김 → 병렬처리

### 멀티 프로세스
두개이상 다수의 프로세서 (CPU)가 협력적으로 하나 이상의 작업을 동시에 처리하는 것 (병렬처리)

### 병렬 처리
여러 개의 작업을 동시에 실행하여서 효율을 높이는 것. 여러 쓰레드를 사용하는 방식과 여러 프로세스를 사용하는 방식이 있음.

### 시스템콜
사용자 프로그램이 특권 명령의 수행을 필요로 하는 경우(디스크 파일접근, 화면에 결과 출력 등..) → 운영체제에게 특권 명령의 대행을 요청하는 것

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

### 커널
운영체제는 커널과 시스템 프로그램으로 구분됨. 커널은 운영체제의 핵심부로 컴퓨터 자원들을 관리하는 역할.

### 프로세스와 스레드
- 프로세스: 운영체제로부터 자원을 할당받은 작업의 단위
- 실행 중에 있는 프로그램, 실행되고 있는 프로그램의 인스턴스
- 하드디스크에 있는 프로그램을 실행하면, 실행을 위해서 **메모리 할당**이 이루어지고, 할당된 메모리 공간으로 바이너리 코드가 올라가게 된다. 이 순간부터 **프로세스**라 불린다.
- 프로세스는 운영체제로부터 독립된 메로리 영역 할당받기 때문에, 다른 프로세스의 변수나 자료에 접근 불가
- 스레드: 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
- 프로세스 하나만을 사용해서 프로그램을 실행하기에는 메모리의 낭비 발생, 스레드는 프로세스와 다르게 스레드 간 메모리를 공유하며 작동
- 스레드는 메모리 서로 공유 가능
- 멀티태스킹: 하나의 운영체제 안에서 여러 프로세스가 실행
- 멀티스레드: 하나의 프로세스가 여러 작업을 여러 스레드를 사용해 동시에 처리하는 것

### 멀티프로세스
- 두개이상 다수의 프로세서 (CPU)가 협력적으로 하나 이상의 작업을 동시에 처리하는 것 (병렬처리)
- 각 프로세스 간 메모리 구분이 필요하거나, 독립된 주소 공간을 가져야 할 경우 사용
- 독립된 구조로 높은 안정성, 프로세스 하나에 문제 생겨도 다른 프로세스에 영향 x. (정지되는 문제 발생하지 않음)
8 changes: 0 additions & 8 deletions docs/chapter1/testfile.rtf

This file was deleted.

0 comments on commit 8420388

Please sign in to comment.