본문 바로가기

전체 글81

[운영체제] 프로세스와 메모리 구조(6): 멀티 프로세싱과 멀티 태스킹 목차 현대 컴퓨팅 환경에서 멀티 프로세싱과 멀티 태스킹은 필수적이다. 이 기술들은 컴퓨터 성능을 향상시키고, 여러 작업을 효율적으로 처리하는 데 중요한 역할을 한다. 멀티 프로세싱은 각 CPU가 다양한 프로세스를 동시에 수행하고, 멀티 태스킹은 단일 CPU가 여러 작업을 동시에 수행한다. 이 글에서는 두 기술의 기본 개념과 현대 컴퓨팅에서의 역할을 살펴본다. 1. 멀티 프로세싱 (Multiprocessing)1.1 멀티 프로세싱의 정의여러 개의 CPU 코어로 동시에 여러 개의 프로세스를 실행하는 방식. 이 방식은 각 CPU가 독립적인 작업을 수행함으로써 전체 시스템의 처리능력과 효율을 향상시킨다. 멀티 프로세싱 환경에서는 각 프로세서의 작업 부하를 균등하게 분배하는 것이 중요하다 (Load Balanci.. 2024. 4. 27.
[운영체제] 프로세스와 메모리 구조(5): 프로세스 스케줄링(Process Scheduling) 목차 1. 스케줄링의 목적프로세스 스케줄링은 여러 프로세스가 효율적으로 CPU를 공유하도록 관리하여, 시스템 성능을 최적화하고 사용자에게 더 나은 반응 시간과 컴퓨터 자원 사용률을 제공하는 것이 목적이다.  2. 선점형 스케줄링 알고리즘선점형 스케줄링은 현재 실행 중인 프로세스를 중단시키고, 다른 프로세스에 CPU를 재할당할 수 있는 방식이다. 이는 특정 상황에서 더 중요하거나 긴급한 프로세스에 빠르게 응답할 필요가 있을 때 유용하다.2.1 라운드 로빈 (Round Robin)“동일한 시간 할당”라운드 로빈 스케줄링은 공정한 시간 분배를 목표로 하여 모든 프로세스가 동일한 시간 동안 CPU를 사용할 수 있게 한다. 프로세스는 준비 큐에서 순환하며, 설정된 시간 할당량 동안 실행된 후 큐의 맨 뒤로 이동한.. 2024. 4. 27.
[운영체제] 프로세스와 메모리 구조(4): 프로세스 제어 블록(PCB) 목차 1. 프로세스 제어 블록(PCB) 프로세스 제어 블록(PCB)은 운영 체제가 프로세스의 정보를 저장하는 중요한 데이터 구조이다. PCB는 프로세스 상태, 프로그램 카운터, CPU 레지스터, CPU 스케줄링 정보, 메모리 관리 정보, 계정 정보, 입출력 상태 정보 등을 포함한다. 이 구조체는 프로세스의 생성 때 생성되어 종료 때 제거된다. 운영 체제는 프로세스 관리를 위해 PCB를 사용하여 각 프로세스의 상태를 추적하고, 프로세스 사이의 컨텍스트 스위칭 시 필요한 정보를 저장하는 역할을 한다. PCB는 프로세스가 CPU 자원을 할당받아 작업을 수행하는 동안 필요한 모든 정보를 포함하므로 운영 체제의 성능과 효율성에 중요한 역할을 한다.  2. PCB의 구성PCB의 구성은 운영 체제의 설계와 구현에 따.. 2024. 4. 27.
[운영체제] 프로세스와 메모리 구조(3): 프로세스와 스레드 목차 하드웨어 및 운영 체제와 밀접하게 상호 작용하는 소프트웨어 개발을 시스템 프로그래밍이라 한다. 시스템 프로그래밍의 핵심 목표 중 하나는 시스템의 효율성과 성능을 최적화하는 것이다.프로세스와 메모리는 이런 시스템 프로그래밍을 이해하기 위한 기초적인 개념이다. 이 두 요소는 컴퓨터 시스템의 효율적인 운영과 시스템 프로그래밍에 필수적이다.1. 프로세스와 스레드1-1. 프로세스프로세스는 실행 중인 프로그램의 인스턴스로, 운영 체제로부터 메모리, CPU 시간, 디스크 공간 등의 자원을 할당받는다. 프로세스는 각각 독립된 메모리 공간을 가지며 독립적인 실행 단위로 간주된다.1-2. 스레드프로세스 내에서 실행되는 하나의 실행 단위. 모든 프로세스는 최소 하나의 스레드를 가지며, 멀티스레딩을 통해 한 프로세스 내.. 2024. 4. 27.
[운영체제] 프로세스와 메모리 구조(2): 커널 공간과 사용자 공간 목차1. 메모리 공간컴퓨터 시스템의 메모리는 크게 커널 공간과 사용자 공간으로 나뉜다.이 구분은 시스템의 보안과 안정성을 유지하는 데 중요하다.+-------------------+ 0x0000| Operating System || Kernel Space || || +--------------+ || | Kernel Code | || | & Data | || +--------------+ || | Kernel | || | Structures | || | +----------+| || | | PCBs || || | | Interrupt|| || | | Tables || || | | etc. .. 2024. 4. 27.
[운영체제] 프로세스와 메모리 구조(1): 메모리와 저장공간 계층구조(Memory Hierachy) 목차1. 메모리의 역할메모리는 프로세스가 실행될 때 필요한 데이터와 프로그램 코드를 저장하는 공간으로, 시스템 성능과 직결된다. 프로세스의 실행 속도와 효율성은 사용 가능한 메모리 양과 관리 방식에 크게 의존한다.2. 메모리 계층 구조컴퓨터 시스템의 메모리는 다음과 같은 계층 구조를 갖는다:레지스터: CPU 내부에 위치하며, 가장 빠른 액세스를 제공한다.캐시: CPU와 주기억장치 사이에 위치하여 자주 사용되는 데이터를 빠르게 접근할 수 있게 한다.주기억장치 (RAM): 프로세스가 실행되는 동안 데이터와 프로그램을 저장한다.보조기억장치: 데이터를 영구적으로 저장하며, 속도는 느리지만 저장 용량이 크다.아래 그림은 저장공간 계층도를 나타낸다:+------------+ Speed Cap.. 2024. 4. 27.
[C#] 추상클래스와 인터페이스의 비교 및 사용처 분석 목차 본 포스팅은 C#에서 인터페이스와 추상 클래스를 사용하는 방법을 다룬다. 우선 인터페이스와 추상 클래스는 상세한 설명 없이 예시로만 간단히 작성하였고, 자세한 사항을 두 개념의 비교 부분에서 자세히 다룬다. 이를 통해 각각의 기능을 정확히 이해하고 언제 사용하면 적합할지 학습할 수 있다. 1. 인터페이스 사용법C#에서 인터페이스는 객체 지향 프로그래밍의 핵심 요소 중 하나이다. 인터페이스를 통해 다양한 클래스가 동일한 계약을 따르도록 하여, 코드의 유연성과 재사용성을 높일 수 있다. 아래 예시에서는 C# 인터페이스의 기본적인 사용법부터, 다중 인터페이스 구현, 명시적 인터페이스 구현, 그리고 인터페이스 상속에 이르기까지의 예시를 소개한다. 1.1 기본 예시// 기본 예시using System;// .. 2024. 4. 26.
[C#] 딕셔너리를 이용한 조건문 리펙토링 목차 다음 포스팅에서는 C# 프로그래밍 중 조건문을 만났을 때 어떻게 코드 가독성과 확장성을 향상시킬 수 있는지 살펴본다. 본 포스트는 전통적인 조건문 상황(if-else)에서 이를 개선하기 위해 딕셔너리와 람다식을 도입한 두 예제를 다루고 있다.  1. 단순 값 반환 조건식 개선기존 방식(Calc1): 특정 연산(add, subtract, multiply)을 수행하기 위해 여러 if-else 문을 사용하여 각 조건에 따라 다른 연산을 수행한다.리팩토링 후(Calc2): 연산명을 키로, 해당 연산을 수행하는 람다 함수를 값으로 가지는 Dictionary를 구성한다. 이를 통해 필요한 연산을 딕셔너리에서 찾아 실행함으로써 코드의 유연성과 확장성을 대폭 향상시킨다. 이 접근법은 새로운 연산을 추가하거나 변경.. 2024. 4. 26.
[IT기술] 웹소켓의 기본적인 이해와 활용방법 목차 웹소켓 기술은 웹에서 실시간 양방향 통신을 가능하게 하여 사용자 경험을 크게 향상시킨다. 본 글에서는 이런 웹소켓의 필요성과 중요성을 탐구하고, 기술의 기본 개념부터 실제 응용까지 어떻게 활용될 수 있는지를 설명한다. 1. 기본 개념웹소켓: 웹소켓은 웹 브라우저와 서버 간의 지속적인 연결을 통해 양방향 통신을 가능하게 하는 프로토콜이다. 이 기술은 HTML5 표준의 일부로서, 실시간으로 데이터를 교환할 수 있도록 설계되었다. 웹소켓 연결은 한 번의 핸드셰이크를 통해 HTTP 연결을 업그레이드한 후 지속되며, 이 연결을 통해 서버와 클라이언트는 신속하게 데이터를 주고받을 수 있다. 웹소켓과 HTTP와의 차이점: HTTP 프로토콜은 요청-응답 패러다임을 기반으로 하며, 클라이언트가 요청을 보내면 서버가.. 2024. 4. 21.