멀티 스레드 VS 멀티 프로세스
·
CS/운영체제
현대 소프트웨어 개발에서는 효율적인 동시 실행(Concurrency)과 병렬 처리(Parallelism)가필수적이다.특히, 백엔드 개발에서는 서버가 동시에 많은 요청을 처리해야 하기 때문에, CPU 활용을 극대화하고, 안정성을 유지하는 실행 방식을 선택하는 것이 중요하다.멀티 프로세스와 멀티 스레드는 이러한 동시 실행을 구현하는 대표적인 두 가지 방식이다.각각의 방식은 성능, 자원 관리, 안정성 측면에서 장단점을 가지고 있으며,어떤 방식이 적절한지는 애플리케이션의 특성과 요구사항에 따라 달라진다.그럼 이제, 멀티 프로세스와 멀티 스레드가 각각 어떻게 동작하는지, 그리고 언제 어떤 방식을 선택하는 것이 좋은지자세히 알아보자.멀티 스레드(Multi-Thread) vs 멀티 프로세스(Multi-Process)..
컴퓨터 시스템의 심장, 메모리 관리 전략
·
CS/운영체제
메모리 관리 전략을 이해하는 건 백엔드 개발자에게 꼭 필요하다.효율적인 메모리 관리는 애플리케이션 성능을 높이고,자원을 아끼는 데 큰 도움이 되기 때문이다.서버는 동시에 많은 사용자 요청을 처리해야 하기 때문에,메모리 할당과 회수를 잘 관리하는 게 성능과 안정성에 직접적인 영향을 준다.메모리 관리를 통해 메모리 누수 같은 문제를 예방해 시스템의 장기적인 안정성을 보장할 수 있다그럼 메모리 관리 전략에 대해서 알아보자. 메모리 관리의 중요성 컴퓨터 시스템에서 메모리 관리는 핵심적인 역할을 수행한다. 모든 컴퓨터 응용 프로그램은 실행을 위해 메모리를 필요로 하며, 이를 효율적으로 관리하는 것이 시스템의 성능과 안정성을 결정짓는 중요한 요소다. 메모리 관리는 사용 가능한 메모리 리소스를 할당하고, 불필요하게..
PCB?
·
CS/운영체제
프로세스 제어 블록(PCB, Process Control Block)은 운영 체제의 핵심 구성 요소 중 하나로,각 프로세스를 관리하고 추적하기 위해 설계된 데이터 구조다. PCB는 단순히 프로세스의 정보를 저장하는 역할뿐만 아니라, 운영 체제가 프로세스를 효율적으로 관리하고 CPU의 활용을 극대화하는 데 필수적인 기능을 제공한다. 이번 글에서는 PCB의 구조, 역할, 그리고 문맥 교환(Context Switching)에서의 중요성을 심층적으로 살펴보자. PCB란 무엇인가?PCB는 운영 체제가 각 프로세스를 관리하기 위해 사용하는 데이터 구조다. 운영 체제는 멀티태스킹 환경에서 수많은 프로세스를 동시에 실행해야 하며, 각 프로세스의 상태와 정보를 효과적으로 관리해야 한다. PCB는 프로세스와 관련된 모든 ..
리눅스 vs 윈도우
·
CS/운영체제
운영체제에 대해 공부를 하다 보니언뜻 궁금한 것이 리눅스와 윈도우 두가지중리눅스운영체제가 개발에 있어 더욱자주 또 많이 쓰인다는 것을 느꼈다.왜 리눅스가 더 많이 쓰일까?윈도우는 왜 개발환경에 적합하지 않을까?두 운영체제의 차이가 무엇일까? 라는 의문에 도달하였고개발자로서 당연히 가질수 있는 의문이기에 이에 대해 공부할 필요성을 느꼈다. 운영체제의 기본 개념운영체제에 대해서는 정리해놓은 블로그 글이 있다. 아래 글을 참고하도록 하고 오늘은 리눅스와 윈도우의 차이점에 대해서 집중 조명 해 보자. https://geishastory.tistory.com/248 운영체제란?운영체제를 왜 알아야 할까?운영체제는 사용자를 위한 프로그램이라기보다프로그램을 위한 프로그램이라고 보는것이 맞다.그렇기에 프로그램을 만드는..
시스템 호출?
·
CS/운영체제
애플리케이션은 대량의 데이터 처리와 높은 성능이 요구되는 경우가 많기에,시스템 호출의 원리와 동작 방식을 이해하면 병목 현상을 분석하고 최적화하는 데 큰 도움이 된다.예를 들어, 파일 읽기나 네트워크 요청 처리에서 비효율적인 시스템 호출을 줄이거나, 비동기 I/O 기술을 활용하여 처리 속도를 높이는 방식으로 성능을 개선할 수 있다.또한, 리소스 관리 측면에서도 시스템 호출을 잘못 사용하면 메모리 누수, 파일 디스크립터 부족, 소켓 연결 초과와 같은 문제를 초래할 수 있다.이러한 문제를 예방하고 안정적인 애플리케이션을 설계하려면 시스템 호출의 동작 방식과 에러 처리 메커니즘을 이해해야 한다. 운영 체제와의 효율적인 상호작용을 통해 성능, 안정성, 확장성을 모두 갖춘 서버를 구현하는개발자가 되기 위해 필수적..
인터럽트?
·
CS/운영체제
인터럽트(Interrupt)는 컴퓨터 시스템에서 중요한 개념으로,CPU가 현재 실행 중인 작업을 중단하고 다른 작업을 처리하도록 하는 신호다. 이 과정은 효율적인 작업 처리를 위해 매우 중요한 역할을 하며, 특히 실시간 처리가 필요한 시스템에서 그 필요성이 강조된다. 이번 글에서는 인터럽트의 정의, 동작 원리, 종류, 그리고 실제 활용 예시까지 상세히 알아보자.인터럽트인터럽트는 하드웨어나 소프트웨어가 CPU에 보내는 신호로, CPU의 현재 작업을 일시적으로 중단시키고, 중요한 작업을 즉시 처리할 수 있도록 한다. 이 신호가 들어오면 CPU는 현재 실행 중인 프로세스를 멈추고, 우선순위가 높은 다른 작업을 처리한 뒤, 다시 원래 작업으로 돌아간다. 인터럽트의 동작 원리인터럽트가 발생하면 다음과 같은 과정이..
동기화?
·
CS/운영체제
왜 동기화를 알아야 할까? 동기화는 백엔드 개발자가 안정적이고 일관된 시스템을 구축하기 위해 필수적이기 때문이다.동기화가 없으면 여러 쓰레드나 프로세스가 동시에 자원에 접근할 때데이터 불일치나 충돌이 발생할 수 있다. 예를 들어, 온라인 쇼핑몰에서 재고를 관리할 때 동기화가 이루어지지 않으면 중복 구매나 재고 초과 문제가 생길 수 있다. 분산 시스템이나 멀티쓰레드 환경에서는 동기화를 통해 데이터의 일관성과 정확성을 보장해야 한다.동기화는 또한 시스템 성능을 최적화하고 자원을 효율적으로 활용하는 데 중요한 역할을 한다.결국, 동기화는 안정적이고 신뢰할 수 있는 서비스를 개발하기 위한 백엔드 개발자의 핵심 역량 중 하나다.동기화아무렇게나 마구 실행해도 괜찮을까?동기화는 여러 작업(프로세스나 쓰레드)이 공유 ..
문맥교환(Context switch)?
·
CS/운영체제
CPU 스케줄링에 대해 공부하게 되면CPU에서 하나의 프로세스만 동작하지 않는것을 알수 있다.다양한 프로세스가 CPU를 거치게 되고 어떠한 프로세스는인터럽트가 발생하게되면 중지되고 우선순위에 의해 디스패치된다.디스패치될 때 Context switch 를 통해 CPU 에서 실행될프로세스가 바뀌게 되는데 이러한 Context switch 즉, 문맥교환은어떻게 이루어지고 왜 중요한지 알아보자컨택스트 스위치문맥교환(Context Switch)은 운영체제에서 CPU가 실행 중인 프로세스나 스레드를 다른 프로세스로 전환하는 과정을 말한다. 이 과정에서 CPU는 현재 실행 중인 프로세스의 상태(컨텍스트)를 저장하고, 새로 실행할 프로세스의 상태를 로드한다. 컨텍스트에는 CPU 레지스터, 프로그램 카운터, 스택 포인터..
커널?
·
CS/운영체제
커널은 왜 알아야 할까?커널은 하드웨어와 소프트웨어 간의 모든 상호작용을관리하는 중추적인 역할을 한다.우리가 작성하는 프로그램은 결국 커널의 도움을 받아 자원을 할당받고,파일 입출력, 네트워크 통신, 메모리 관리 같은 핵심 기능을 수행한다.그렇기에 개발자는 커널이 어떻게 동작하고,자원을 관리하며, 시스템 요청을 처리하는지를 이해해야 한다.이는 성능 최적화와 안정적인 시스템 설계에 필수적이며,특히 서버 개발이나 고성능 애플리케이션 구현에 있어 강력한 무기가 된다.결국 커널을 이해하는 것은 시스템 전반을 깊이 이해하고 제어할 수 있는 개발자로 성장하는 지름길이다.커널커널은 운영체제의 핵심 부분으로, 컴퓨터 하드웨어와 소프트웨어를 연결해주는 역할을 한다. 쉽게 말해, 커널은 하드웨어 자원을 효율적으로 관리하면..
스케줄링?
·
CS/운영체제
CPU 스케줄링은 단순히 이론적인 지식을 넘어, 안정적이고 효율적인 서버 환경을 구축하고 최적화된 애플리케이션을 개발하는 데 중요한 역할을 한다.백엔드 개발자는 서버에서 발생하는 프로세스와 스레드의 관리를 이해해야 하며,이는 동시성 문제를 해결하고 응답 속도를 최적화하기 위한 첫걸음이다.예를 들어, 요청이 많아지는 상황에서 적절한 스케줄링 알고리즘을 이해하고 활용하면 CPU 자원을 효율적으로 배분하여 서비스 품질을 유지할 수 있다.CPU 스케줄링을 이해하는 것은 단순히 백엔드 개발의 지식을 넓히는 것을 넘어,실질적인 성능 최적화와 안정적인 서비스 제공의 기반을 마련하는 데 있어 필수적인 요소다.그렇기에 개발자가 목표라면 스케줄링을 알아야 한다.스케줄링 스케줄링은 운영체제가 CPU와 같은 시스템 자원을 효..