diff --git a/docs/chapter1/Ch01Keyword.md b/docs/chapter1/Ch01Keyword.md new file mode 100644 index 0000000..077c07a --- /dev/null +++ b/docs/chapter1/Ch01Keyword.md @@ -0,0 +1,196 @@ +# Chapter 1. 서버란 무엇인가 + +## 🔍 미리 알아둬야 할 선행 내용 + +### 1. 시스템 콜 + + - ✅ 개념 + 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다. + +
+ + - ✅ 특징 + - 시스템 콜은 여러 종류의 기능으로 나누어진다. + + - 시스템 콜 인터페이스는 시스템 콜 번호와 시스템 콜 핸들러 함수 주소로 구성되는 시스템 콜 테이블을 유지한다. + + - 운영체제는 자신의 커널 영역에서 해당 인덱스가 가리키는 주소에 저장되어 있는 루틴을 수행한다. + + - 작업이 완료되면 CPU에게 인터럽트를 발생시켜 수행이 완료 되었음을 알린다. + + + + - ✅ 유형 + - 프로세스 컨트롤 / 파일 매니지먼트 / 디바이스 매니지먼트 / 정보 관리/ 통신 / 보안 + +
+ +### 2. 프로세스와 스레드 + + - ✅ 프로세스 (Process)란? + - 실행중에 있는 프로그램 / 운영체제로부터 지원을 할당받은 작업의 단위 + + - ✅ 프로세스의 상태 + - Running : CPU를 잡고 instruction을 수행중인 상태 + - Ready : CPU를 기다리는 상태 + - Blocked : CPU을 주어도 당장 instructin을 수행할 수 없는 상태 + - New : 디스크에서 메모리로 프로그램이 올라가 실행준비를 하는 상태 + - Terminated : 수행이 끝난 상태 + + - ✅ PCB (Process Control Block) + - 운영체제가 프로세스를 표현한 자료구조 + + - ✅ 문맥교환 (Context Switch) + - 하나의 프로세스가 이미 CPU 를 사용중인 상태에서 다른 프로세스가 CPU 를 사용하기 위해 이전 프로세스의 상태를 저장하고 새로운 프로세스의 상태를 적재하는 것 + + - ✅ 스레드 (Thread) + - 스레드는 프로세스와 다르게 스레드 간 메모리를 공유하며 작동한다 + + - ✅ 프로세스와 스레드의 차이점 + - 프로세스 : 다른 프로세스의 변수나 자료에 접근할 수 없다. + - 스레드 : 별도의 스택을 가지고 있지만 힙 메모리는 서로 읽고 슬 수 있게 된다. + +
+ +### 3. TCP / UDP 차이 + - ✅ TCP(Transmission Control Protocl) + - 연결형 서비스 / 흐름제어 / 혼잡제어 / 신뢰성이 높은 전송 / 전이중, 점대점 방식 + + - ✅ UDP(User Datagram Protocol) + - 비연결형 프로토콜 / 데이터 경계 구분 / 비신뢰성 있는 데이터 전송 / 일대일. 다대다 통신 + +
+ +### 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 명령 수행속도보다 느리기 때문 + + - 🎈 하드웨어 인터럽트
+ : 하드웨어가 발생시키는 인터럽트로, 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 + +
+ + - 🔍 socket()의 리턴 값은 파일 디스크립터이다. + - 🎈 파일 디스크립터가 소켓의 파일 디스크립터인 경우 송수신 동작을 함 + - ➡️ socket() 시스템 콜은 domain, prtocol을 사용하는 틀을 만들어는 것 + +--- + +## ✏️ bind() 시스템 콜 + +- ✅ bind(sockfd, sockaddr, socklen_t); + - sockfd : 바인딩을 할 소켓의 파일 디스크립터 + - sockaddr : 소켓에 바인딩 할 아이피 주소, 포트번호를 담는 구조체 + - socklen_t : 위 구조체의 메모리 크기 + +
+ + - 생성한 소켓에 실제 아이피 주소와 포트번호를 부여하는 시스템 콜 + - 서버에서만 사용! + +--- + +## ✏️ listen() 시스템 콜 + +- ✅ listen(sockfd, backlog) + - sockfd : 소켓의 파일 디스크립터 + - backlog : 연결요청을 받아줄 크기 = TCP 백로그 큐의 크기 + +
+ + - 시스템 콜에서 설정하는 backlog가 TCP에서의 backlog queue의 크기이다. + - lient가 클라이언트 소켓을 통해 처음으로 서버에 요청을 하여 백로그 큐에 들어갈 때 syn 요청을 보내게 됨. + +--- + +## ✏️ accept() 시스템 콜 + +- ✅ int accept(sockfd, sockaddr, socklen_t) + - sockfd : 백로그 큐의 요청을 받아들이기 위한 소켓의 파일 디스크립터 + - sockaddr : 선입선출로 빼온 연결 요청에서 알아낸 클라이언트의 주소 정보 + - socklen_t : 위 구조체의 메모리 크기 + +
+ + - backlog queue에서 syn을 보내와 대기 중인 요청을 선입선출로 하나씩 연결에 대한 수립을 해줌. + - 🔍 TCP 3 -way handshake + - 클라이언트와 서버간에 서로 신뢰성있는 통신을 위한 과정 + - 새로 만든 소켓은 데이터 송수신을 담당함 (자식 소켓), 응답후 exit(0)으로 종료 + - 부모 소켓은 연결 요청만 받아서 자식소켓으로 넘김 → 병렬처리 + +--- + +## ✏️ 멀티 프로세스와 멀티 스레드 + +- ✅ 멀티 프로세스 + - 개념 : 두개 이상 다수의 프로세서가 협력적으로 하나 이상의 작업을 동시에 처리(병렬처리) + - 장점 + - 독립된 구조로 안정성 높음 + - 다른 프로세스에 영향을 주지 않아, 문제 발생 확률이 낮음 + - 문제점 + - 작업량이 많을 수록 오버헤드 발생 + +- ✅ 멀티 스레드 + - 개념 : 하나의 프로세스에 여러 스레드로 자원을 공유하며 작업을 나누어 수행 + - 장점 + - 시스템 자원소모 감소 + - 시스템 처리율 향상 + - 문제점 + - 하나의 스레드에 문제가 생기면 전체 프로세스에 영향 + - 자원을 공유하기에 동기화 문제 발생 가능성 + - 동시성 문제 + +--- + +## ✏️ 병렬 처리 + +- ✅ 병렬 시스템(Parallel System) + - 개념 : 다중 프로세스 시스템으로 2개 이상의 CPU가 각자 맡은 역할을 수행 + - 구조 + - 대칭 구조 : 각각의 프로세서가 동일한 운영체제 사본을 가지고 수행 + - 비대칭 구조 : 각각의 프로세서가 각자의 역할이 존재한다. + + + + diff --git a/docs/chapter1/Ch01Keyword.txt b/docs/chapter1/Ch01Keyword.txt new file mode 100644 index 0000000..e69de29