전체 글 132

[Java] 객체지향 프로그래밍(OOP; Object-Oriented Programming)

객체지향 프로그래밍(OOP; Object-Oriented Programming)현실 세계의 사물을 모델링하여 소프트웨어를 개발하는 방법.프로그램을 "객체"의 모임으로 보고, 객체들 간의 상호 작용을 통해 프로그램을 구성한다.크게 클래스, 객체, 메서드로 구성된다.  클래스(class)같은 종류의 집단에 속하는 속성과 행위를 정의한 것(객체들의 청사진)객체(object)데이터(상태)와 데이터를 처리하는 메서드(행위)를 캡슐화한 하나의 SW 모듈.클래스로 의해 생성된 객체를 인스턴스(instance) 라고 하며,클래스로부터 새로운 객체를 생성하는 것을 인스턴스화 라고 한다.데이터: 속성, 상태, 변수, 상수, 자료구조 라고도 함 메서드(method): 객체가 수행하는 기능으로 객체가 갖는 데이터를 처리하는 ..

CS 2023.10.19

[Spring] PSA(Portable Service Abstraction)

추상화(Abstraction) 불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 개략화하는 것 PSA(Portable Service Abstraction): 휴대용 서비스 추상화 Portable은 휴대용이라는 의미로 JDBC Driver 의 종류를 비즈니스 로직의 수정없이 변경할 수 있는 것을 의미한다. 즉, MySQL Driver 를 사용하다 Oracle Driver 로 변경 시, 비즈니스 로직 수정 없이 바꿀 수 있다는 것이다. 이런 기능이 가능한 것은 추상화 계층이 존재하기 때문이다. 모든JDBC Driver 는 공통적인 인터페이스를 가지고 있어 다른것으로 대체하어도 프로젝트에 영향을 끼치지 않는다. 이러한 점에서 Spring PSA 는 확장에는 열려있고 수정에는 닫혀있어야 ..

CS 2023.10.18

[OS] 캐시의 지역성

캐시 메모리(Cache Memory) 캐시 메모리는 속도가 빠른 장치와 느린 장치간의 속도차에 따른 병목 현상을 줄이기 위한 범용 메모리이다. 주기억장치에서 자주 사용하는 프로그램과 데이터를 저장해두어 처리 속도를 빠르게 한다. 여기서 캐시 기억장치와 주기억장치 사이에서 정보를 옮기는 것을 사상(Mapping, 매핑)이라고 한다. Mapping의 3가지 방법 직접 매핑(Direct Mapping) 주기억장치의 블록들이 지정된 한 개의 캐시 라인으로만 사상될 수 있는 매핑 방법. 간단하고 구현하는 비용이 적다는 장점이 있지만 캐시 적중률이 낮아질 수 있다. 연관 매핑(Associate Mapping) 직접 매핑 방식의 단점을 보완한 방식. 모든 태그들을 병렬로 검사하기 때문에 복잡하고 비용이 높다는 단점 ..

CS 2023.10.07

[OS] 가상 메모리(Virtual Memory System)란?

가상 메모리 등장 배경 프로세스는 작업 처리를 위해 메모리를 할당 받아야 한다. 컴퓨터의 실제 메모리 공간보다 프로세스가 처리해야할 메모리 공간이 더 많을 수 있다. 이 부분을 해결하기 위해 가상 메모리가 등장하게 되었다. 가상 메모리는 물리 메모리보다 큰 프로세스나 여러 개의 프로세스들을 동시에 실행시킬 수 있도록 하기 위한 방법이다. 가상 메모리란? 가상 메모리(Virtual Memory)는 운영체제에서 실제 물리 메모리(RAM)보다 큰 주소 공간을 프로세스에 제공하기 위해 사용되는 기술이다. CPU가 프로세스를 처리할 때, 특정 시점에 프로세스의 특정 메모리를 접근(액세스)하는 주소값은 아주 작을 것이다. 가상 메모리는 프로세스와 관련된 주소값을 저장하는 메모리 공간을 분리하여 관리함으로써 내 컴퓨..

CS 2023.10.07

[OS] 교착상태와 기아상태란? 해결방법

Dead Lock(교착상태) 다중 프로세싱 환경에서 두 개 이상의 프로세스가 특정 자원할당을 무한정 대기하는 상태 아래 조건 중 하나라도 미충족 시 교착상태가 발생하지 않음 상호 배제(Mutual Exclusion) : 한번에 한개의 프로세스만이 공유 자원을 사용할 수 있어야 한다 점유와 대기(Hold and Wait) : 자원을 가지고 있는 상태에서 다른 프로세스가 사용하고 있는 자원의 반납을 기다리는 것 비선점(Non-Preemption) : 다른 프로세스에 할당된 자원은 강제로 뺏을 수 없어야 한다 환형 대기(Circular Wait) : 원형 구조로 구성되어 있어 할당된 자원을 점유하면서 앞이나 뒤에 있는 프로세스의 자원을 요구해야 한다 교착상태 해결방법 예방 기법(Prevention) : 사전에..

CS 2023.10.06

[OS] 동기화(Synchronization)란?

동기화(Synchronization) 1. 멀티 프로세스, 멀티 스레드 환경에서 자원에 한 프로세스만이 접근가능하도록 하는 것 2. 멀티 프로세스, 멀티 스레드 환경에서 여러 프로세스가 공유 자원에 동시에 접근하는 것을 조절하는 메커니즘 멀티 프로세스, 멀티 스레드 환경에서 프로세스 동기화를 하지 않으면 데이터의 일관성이 깨지기 때문에 연산결과가 잘못 반환될 가능성이 존재한다. 동기화를 통해 공유 자원을 안전하게 사용하고, 예측 가능한 방식으로 프로세스 간 상호작용을 관리하기 위해 필요하다. Race Condition(경쟁 상태): 여러 프로세스나 스레드가 동기화 메커니즘 없이 자원에 접근하려는 상태. 공유된 자원에 대한 접근 순서에 따라 실행 결과가 달라질 수 있는 상황을 의미한다. Race Condi..

CS 2023.10.06

[OS] Thread-safe란? 의미 및 설계하는 법

Thread-safe 1. 다중 스레드 환경에서 여러 스레드가 동시에 공유하는 데이터나 자원을 안전하게 사용할 수 있는 상태 2. 여러 스레드가 동시에 동작할 때 발생할 수 있는 경쟁 조건(race condition)이나 데이터 불일치 문제를 방지하는 것 설계하는 법 1. Mutual Exclusion(상호배제) 방식을 이용한 Critical Section(임계 영역) 공유 자원을 사용할 경우, 해당 자원에 대한 접근을 프로세스 동기화로 통제 상호 배제(Mutual Exclusion): 한번에 한개의 프로세스만이 공유 자원을 사용하도록 함 임계 영역(Critical Section): 여러 스레드가 공유 자원에 접근하는 코드 영역 락 (Lock): 스레드가 임계 영역에 진입하기 전에 획득하고, 나올 때 해..

CS 2023.10.06

[OS]멀티스레드 프로그래밍이란? 장점 및 사용환경, 주의점

멀티스레드 프로그래밍: 하나의 프로그램이 동시에 여러 작업을 수행할 수 있게 하는 프로그래밍 기법 단일 스레드 프로그래밍과 비교했을 때의 이점 1.성능 향상: 일반적으로 단일 스레드보다 빠르게 작업을 수행할 수 있다. 2.자원 활용: 하나의 스레드가 대기 중일 때, 다른 스레드 작업을 수행할 수 있어 CPU, 메모리 등 자원을 효과적으로 활용할 수 있다 3. 응답성 향상: 여러 작업을 병렬로 처리할 수 있으므로, 프로그램이 빠르게 응답할 수 있다. 멀티스레드 프로그래밍을 사용하는 환경 1.다중 사용자 환경: 여러 사용자가 동시에 시스템을 사용할 때 각각의 요청을 동시에 처리하기 위해 사용. 2.GUI 애플리케이션: 그래픽 사용자 인터페이스(GUI)를 가진 애플리케이션에서는 사용자의 입력, 화면 업데이트,..

CS 2023.10.05

[OS] Context Switching

Context Switching CPU는 한번에 하나의 프로세스만 실행 가능하다. OS(프로세서 스케줄러)에 의해 CPU가 할당되는 프로세스 변경 될 때를 문맥교환(Context Switching)이라 한다. 프로세스에 CPU 할당을 위해 현재 CPU가 할당된 프로세스의 상태 정보를 PCB에 저장 새로운 프로세스의 상태 정보를 설정 후 CPU를 할당하여 실행 PCB(Process Control Block, 프로세스 제어블록) : 프로세스의 중요한 정보를 저장해 놓는 곳 각 프로세스가 생성될 때 마다 고유의 PCB가 생성, 프로세스가 완료되면 PCB는 제거됨 PCB 정보 프로세스의 현재 상태 : 준비, 대기, 실행 등의 프로세스 상태 프로세스 고유 식별자 : 프로세스를 구분할 수 있는 고유의 번호 스케줄링..

CS 2023.10.05

[OS] 멀티 프로세스와 멀티스레드의 장단점

- 프로세스(process): 프로세서(처리기, CPU)에 의해 처리되는 프로그램(실행중인 프로그램)을 의미 - 스레드(Thread) : 프로세스 내의 작업단위, 여러 자원을 할당받아 실행하는 프로그램의 단위 멀티 스레드 vs 멀티 프로세스 멀티 스레드: 하나의 프로세스 안에서 여러개의 스레드를 병렬적으로 사용하는 것. 장점 멀티 프로세스보다 적은 메모리 공간을 차지하고 Context Switching이 빠르다. 멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행할 경우, 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다. 프로세스 간의 통신보다 스레드 간의 통신 비용이 적으므로 작업들 간 통신의 부담이 줄어든다. (처리비용 감소. 프로세스는 독립구조이기 때문) ..

CS 2023.10.05