본문 바로가기

취업과 기본기 튼튼/빽 투더 기본기

(38)
[디자인 패턴 2편] 생성 패턴, 싱글톤(Singleton) 1. 개념 싱글톤 패턴은 단 하나의 인스턴스를 생성해 사용하는 디자인 패턴이다. 1.1. 장점 하나의 인스턴스를 사용 -> 메모리 낭비를 방지할 수 있음 전역 인스턴스 -> 다른 클래스의 인스턴스들이 데이터를 공유 1.2. 단점 싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우, SOLID 원칙 중 SRP, OCP 원칙에 위배됨. 즉, 수정과 테스트가 어려워짐 꼭 필요한 경우아니면 지양해야 함 1.3. 활용 상황 공통된 객체를 여러 개 생성해서 사용해야하는 상황 전역에서 사용될 하나의 객체를 만들어야하는 상황 ex. DBCP(Database Connection Pool), 로거(Logger) 2. 구조 3. 코드 // SingletonPatternDemo.java public clas..
[디자인 패턴 1편]. 디자인 패턴 개요 1. 디자인 패턴이란 디자인 패턴은 소프트웨어 공학론 안의 좋은 코드를 설계하기 위한 일종의 설계 디자인 방법론이다. 그렇다면 좋은 코드란 무엇인가? 좋은 코드란, 가독성, 간결함 등 여러 방면이 있겠지만, 디자인 패턴에서는 설계적 관점에서의 좋은 코드를 말한다. 즉, 확장과 수정에 용이하여 설계 이후에도 추가적인 유지 보수에 비용이 적게들어가는 코드를 말한다. 객체지향적으로 생각하면, 추구해야할 설계 방향은 다음과 같다. 객체 간 응집도는 높이고, 결합도는 낮게. 요구 사항 변경 시, 코드 변경을 최소화 하는 방향으로. 그리고 이러한 '좋은 코드' 설계하려면 이러이러한 원칙들이 지켜지면 좋다라고 논의되어왔다. 조금 더 스코핑하면, '객체지향 방법론' 에서는 이게 SOLID 원칙이 된다. 또 이러한 원칙..
빽 투더 기본기 [OS 8편]. 가상 메모리 관리 1. 가상 메모리 개념 1.1. 등장 배경 프로그램을 실행하는 동안, 우리는 프로그램이 필요로 하는 모든 메모리를 동시에 사용하지 않는다. 즉, 현재 프로세스가 필요로 하는 메모리만, 메인 메모리에 로드하고, 추후 실행될 영역은 보조 메모리에 저장해둔다. 필요할 때만 Swapping (메인 메모리 보조 메모리) 하면 되는 셈. 이렇게 하면, 메인 메모리보다 큰 프로그램을 실행시킬 수 있다. 이렇게, 보조 메모리를 활용한 메모리 시스템을 가상 메모리 시스템이라고 한다. 1.2. Demand Paging 1) 개념 요구 페이징(Demand Paging) 은 페이징 시스템에 Swapping을 결합한 것. 위에서 설명한 것과 같다. Swapping 을 요구 될 때만 하기 때문에, lazy swapper 라고도 ..
빽 투더 기본기 [OS 7편]. 메모리 관리 2 1. 페이지 테이블 구현 1.1. 페이지 테이블과 메모리 이슈 페이지 테이블도 메모리에 저장되어있다. 기준 레지스터 Page Table Base Register (PTBR) 페이지 테이블의 시작 주소가 저장되어있다. CS(Context Swithching) 시 페이지 테이블 교체 비용이 적다 PTBR 값만 변경 메모리 접근 시간 문제 메모리 접근시간 2배 하나의 메모리 접근을 위해 페이지 테이블을 거쳐야 하므로, 메모리를 2번 읽게 되고, 결과적으로 접근시간은 2배 걸림 TLB (Translation Look-aside Buffer) 페이지 테이블의 캐싱으로 해결 1.2. TLB 메모리에 있는 페이지 테이블과 다르게, 캐시 메모리(하드웨어)에 별도로 (페이지 넘버 - 프레임 넘버)에 대한 매핑 정보를 담..
빽 투더 기본기 [OS 6편]. 메모리 관리 1 0. 들어가기 전, 알아야 할 상식 운영체제의 선수과목인 시스템 프로그래밍 내용 중, 운영체제와 매우 밀접하게 연관된 내용이 있는데, 이 부분을 먼저 알아야 한다. 바로 컴파일러, 어셈블러, 링커, 로더에 대한 기본 이해다. 먼저 이 개념을 명확히 하고가자. 내용은 https://seohs.tistory.com/259 을 참고했다. 먼저, 하나의 코드가 프로그램이 되고, 프로그램이 프로세스가 되는 과정은 다음과 같다. 코드 작성 -- (컴파일) --> 오브젝트 파일 -- (링킹) --> 실행 파일(=프로그램) -- (로드) --> 메모리 적재 및 수행(=프로세스) 컴파일러 ​ 사용자가 작성한 원시코드를 컴퓨터가 읽을 수 있는 형태의 오브젝트 파일로 만드는 프로그램 어셈블러 ​ 어셈블리어 코드를 기계어 코..
빽 투더 기본기 [OS 5편]. 뮤텍스와 세마포어 이 글에서는 저번 글에 이어, 동기화 기법 중 하나인 뮤텍스와 세마포어에 대해 적어본다. 1. 뮤텍스 (MUTual Exclusion) 1.1. 뮤텍스란? 뮤텍스는 상호배재라는 뜻으로, 이전 글에서와 마찬가지로 동기화 기법 중 하나이다. 뮤텍스는, 쓰레드 간 임계 영역의 동기화를 위한 기법이다. 1.2. 어떻게 구현하는가? lock 과 unlock 의 개념이 등장한다. 임계 영역에 먼저 들어가는 쓰레드가 lock 을 걸면, 이 쓰레드가 unlock 을 할 때 까지, 다른 쓰레드들은 임계 영역에 들어가지 못하도록 하는 것이다. 즉, 임계 영역에 들어가는 쓰레드는 임계 영역 앞뒤에 lock 과 unlock 을 해야한다. v = 1; def lock(): while v != 1 # 2. 이미 다른 쓰레드에 의..
빽 투더 기본기 [OS 4편]. 동기화와 Peterson' 알고리즘 이 글에서는 운영체제의 기초가 되는, Synchronization(동기화) 에 대해 정리해본다. 1. 동기화(Synchronization) 의 필요성 1.1. Shared data 와 Data inconsistency 먼저 동기화(Synchronization) 는 멀티 프로세스 혹은 멀티 쓰레드 상황에서의 이슈이다. 여러 개의 프로세스, 혹은 쓰레드가 공유된 자원, 데이터를 사용하는 경우, 스케쥴링 시스템에 의해 데이터의 일관성(Data Consistency) 를 지키지 못하는 경우가 생기는데, 이게 바로 문제다. 예를 들어, 내가 내 계좌에 1000원이 있다고 하자. 내가 500원을 출금하려고 하는 동시에, 친구가 내 계좌로 500원을 송금했다면, 내 잔고는 당연히 1000원이 있어야 맞다. 이 때 출..
빽 투더 기본기 [OS 3편]. CPU 스케쥴링 이 글에서는 CPU Scheduling (스케쥴링) 에 대해 정리해본다. 1. CPU 스케쥴링 1.1. 기본 개념과 용어 CPU 스케쥴링 목적 다중 프로그래밍을 함으로써, 항상 실행할 수 있는 프로세스를 있도록 하여, CPU 사용 효율을 극대화 하는 것이 목적이다. CPU, I/O burst 프로세스는 계산과 입출력의 반복. 계산(CPU burst) / 입출력(I/O burst) 선점 / 비선점 스케쥴링 선점은 RUN 중인 프로세스를 갑자기 중단시키고 다른 프로세스가 RUN 할 수 있는 방식 비선점은 RUN 중인 프로세스를 중간에 갑자기 중단 불가능. 일단 한 번 할당 받으면, 시간이 다 되거나, 완료 될 때까지 다른 프로세스들이 기다려야함. Dispatcher 스케쥴러가 선택한 프로세스를 CPU에 할당..