본문 바로가기

반응형

임베디드 리눅스

(22)
네트워크 프로그래밍 - 다중 접속 서버 구현을 위한 이론 1 ( feat. 쓰레드 ) 안녕하세요! WH입니다. 이번 글은 다중 접속 서버 구현 중 쓰레드를 활용한 내용인데요. 그 중에서도 쓰레드에 대해 필요한 이론 부분들을 짚고 가겠습니다. 멀티 프로세스 기반 서버의 단점이 새로운 클라이언트가 연결될 떄마다 프로세스를 생성하기 떄문에 비용이 크고 비효율적이며, context switching 때문에 성능이 저하 된다고 말했었죠?? 그래서 쓰레드를 가자고 이 문제의 일부를 해결해 보고자 합니다. Thread 저번 글에서 간단하게 설명드렸지만, Thread( 쓰레드 )는 프로세스를 구성하는 실행 흐름으로 단위가 작다고 말씀드렸죠? 프로세스는 독립적인 메모리 공간을 사용하기 때문에, 메모리 모든 영역의 복사가 일어난다고 했었고, 쓰레드의 경우 스택 영역만 복사가 일어나고 나머지는 공유를 한다고..
네트워크 프로그래밍-멀티 프로세스, 멀티 쓰레드, 멀티 플렉싱 안녕하세요. WH 입니다. 네트워크 관련 글들을 누군가가 봐주시더라구요. 감사함에 또한 글을 이렇게 쓰고 있습니다. 언제가 될지는 모르겠지만, 많은 글들이 쓰여지고 이 글들이 누군가에게 계속 도움이 되길 바랍니다 멀티 플렉싱에대해 먼저 쓰다가 생각이 바뀌어 다시 작성 중입니다. 멀티 프로세스, 멀티 쓰레드, 멀티 플렉싱이 무엇인줄 아는 게 좋을 것 같아서요; 간단한 글이지만 시작하겠습니다. 왜 필요할까? 왜 필요할까에 대한 대답이 먼저 일 것 같아요. 쉽게 생각해 보겠습니다. 지금까지 다룬 것은, 서버와 클라이언트가 있을 때 둘이 통신하면 서버도 닫히는 형태였죠. 즉 서버를 열면 요청을 하나 처리하면 끝이났단 말이에요. 그런데 실제 서버는 어떻죠? 다수의 클라이언트들이 요청하고 서버는 그 요청을 들어주죠..
네트워크 프로그래밍 - 소켓 통신 다중 접속 서버 코드( C++ 구현 ) 안녕하세요. WH입니다. 오늘은 지난 번 글에 설명드렸던 아래 그림을 C++로 코딩해볼게요 뭐 달라지기야 하겠습니까만! 매일 C로만 코딩하면 재미없잖아요. C++ 로 구현해보도록 할게요 혹시 지난번 글이 생각나지 않으신다면 아래 글을 참조해 주세요 2022.02.14 - [임베디드 리눅스] - 네트워크 프로그래밍 - 다중 접속 서버 구현을 위한 기초 (feat. 프로세스, fork(), 좀비 프로세스 ) 2022.02.14 - [임베디드 리눅스] - 네트워크 프로그래밍 - 다중 접속 서버 기초 이론 ( feat. 시그널 핸들링 ) 2022.02.14 - [임베디드 리눅스] - 네트워크 프로그래밍 - 다중 접속 서버 이론 네트워크 프로그래밍 - 다중 접속 서버 이론 안녕하세요. WH입니다. 적게 나마 제 ..
네트워크 프로그래밍 - 다중 접속 서버 이론 안녕하세요. WH입니다. 적게 나마 제 글을 누군가는 찾아주시고 누군가는 읽어 주시더라구요. 언젠가는 누군가와 소통하는 날이 오질 않겠나 하며 오늘도 열심히 정리해보겠습니다. 서버 구현 기초에서 구현했던 통신 구조 조금은 오래되어 기억이 안나실라나요? 네트워크 프로그래밍 서버에 대해서 간단히 구현을 했었죠? 기억이 나질 않으시면 간단하게 아래 글을 참조해주세요 2022.02.04 - [임베디드 리눅스] - 네트워크 프로그래밍-소켓 통신 서버 구현 4 네트워크 프로그래밍-소켓 통신 서버 구현 4 안녕하세요. WH입니다. 기본적으로 서버에 연결하면 연결되었음을 확인하도록 보내는 서버를 구현해 보았는데요, 이번에는 파일을 전송하는 서버를 구현해보겠습니다. 시작할까요? 해당 내용을 developer-wh.tis..
네트워크 프로그래밍 - 다중 접속 서버 기초 이론 ( feat. 시그널 핸들링 ) 이제 아마도 이론 2 번 정도? 정리한 후에 코딩을 해볼꺼에요. 이 과정이 조금 지루하긴 하지만 화이팅 합시다 저번 글에서는 좀비 프로세스, fork, waitpid 등에 대해 다뤘어요 기억이 나질 않는다면 아래 글을 참조해 주세요 2022.02.14 - [임베디드 리눅스] - 네트워크 프로그래밍 - 다중 접속 서버 구현을 위한 기초 (feat. 프로세스, fork(), 좀비 프로세스 ) 네트워크 프로그래밍 - 다중 접속 서버 구현을 위한 기초 (feat. 프로세스, fork(), 좀비 프로세스 ) 안녕하세. WH 입니다. 피곤한 월요일이네요. 저만 그럴까요? ㅎㅎ 그건 그거고 여튼 시작해 보겠습니다. 네트워크 프로그래밍이 반응이 좋아서 다중 접속 서버 구현을 한번 해볼까합니다. 대표적 developer..
네트워크 프로그래밍 - 다중 접속 서버 구현을 위한 기초 (feat. 프로세스, fork(), 좀비 프로세스 ) 안녕하세. WH 입니다. 피곤한 월요일이네요. 저만 그럴까요? ㅎㅎ 그건 그거고 여튼 시작해 보겠습니다. 네트워크 프로그래밍이 반응이 좋아서 다중 접속 서버 구현을 한번 해볼까합니다. 대표적으로 3가지 방법이 있는데요. 멀티 프로세스, 멀티 플렉싱, 멀티 쓰레드 방법이 있습니다. 가장 먼저 멀티 프로세스 방법에 대해 알아보겠습니다. 멀티 프로세스 기반 서버 다수의 프로세스를 생성하는 방식으로 서버를 구현하는 방법입니다. 모든 프로세스는 운영체제로부터 ID를 부여 받습니다. 그리고 이 ID 를 프로세스 ID라 부르고 2 이상의 정수를 가진답니다. 1은 어디갔냐구요? 운영체제 실행을 돕는 프로세스에게 할당된답니다. 제가 이제까지 이야기하고 있던 환경은 리눅스 우분투였죠? 실행 중인 프로세스를 확인하는 방법은..
네트워크 프로그래밍-소켓 통신 서버 구현 4 안녕하세요. WH입니다. 기본적으로 서버에 연결하면 연결되었음을 확인하도록 보내는 서버를 구현해 보았는데요, 이번에는 파일을 전송하는 서버를 구현해보겠습니다. 시작할까요? 해당 내용을 알기 위해서 필요한 사전 지식에 대해 먼저 정리합니다. 바이너리 파일 한 단어로 정의하자면 실행 파일입니다. 그러나 좀 더 들어가서 보자면 바이너리 파일은 사용자 또는 프로그램이 사용하던 정보나 숫자 값을 특별한 가공 없이 그대로 파일에 저장한 파일을 의미합니다. 이것은 파일을 전송할 때 큰 장점을 가집니다. 텍스트 파일을 예로 들어보겠습니다. 리눅스에서 txt 파일 예시 Hello world!\n This is a text file\n 윈도우에서 txt 파일 예시 Hello world! \r\n This is a text..
C언어 main 함수 ( feat. argc, char *argv[] ) 안녕하세요. WH입니다. 오랜만에 기본적인 코딩을 하다가 문득 옛날 생각이 나서 이 글을 써봅니다. 아래 코딩을 보면서 시작하겠습니다. int main(void) { return 0; } int main(int argc, char *argv[]) { return 0; } 메인 함수에 전달 인자가 있다? 리눅스 계열에서는 매우 많이 사용하지만, 여튼 우리는 메인함수에 전달인자를 주는 경우가 있습니다. 그런데 아마도 이런 말을 들어보셨을 겁니다. " 프로그램을 구동하면 main 함수부터 시작한다. " 그런데 이상합니다. main 함수부터 시작하는데 어떻게 매개변수를 받죠? 정답은 파일을 실행할 때 값을 적어주면 그 값이 전달됩니다. 말로만하니까 이해가 잘 안가죠? 예를 들어, testserver.c 라는 코..