-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
[randy] Chapter 1. 서버란 무엇인가(소켓&멀티 프로세스)
- Loading branch information
Showing
2 changed files
with
196 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.