운영체제 퀴즈를 보고 오답을 정리하다가 작성하게된 포스트 문제는 다음과 같았다. 헷갈려서 다시 제대로 정리하고 넘어가려고 한다. 일단 multiprogramming과 multitasking 각각 다중 프로그래밍 과 다중 태스킹 이라고 한다. multiprogramming 일단 하나의 프로그램으로는 CPU 나 I/O 장치를 계속 바쁘게 만들 수는 없다. 하나의 프로그램으로는 CPU를 쓰거나... I/O 장치를 쓰거나... 둘 중 하나기 때문에 CPU랑 I/O 장치 중에 무언가 하나는 쉬고 있을 수 밖에 없다. 이게 아까운거다.(유휴상태가 발생함) 사람들은 사용을 안하는 그 시간에 다른 프로그램도 돌리고 있으면 좋겠다는 생각을 했다. 그래서 한 번에 두 개 이상의 프로그램을 돌리는 게 multiprogram..
https://suhwanc.tistory.com/175?category=879656 공룡책과 함께 OS를 배워보자 1일차 - Overview 본 포스트는 공룡책이라 불리는 Abraham Silberschatz, Peter B. Galvin, Greg Gagne의 『Operating System Concept 10th』 을 바탕으로 작성하였습니다. Ch 1. Overview 1장에서는 이 책의 전반적인 내용을 모.. suhwanc.tistory.com https://jhnyang.tistory.com/notice/31 운영체제(OS) 목차 &책 추천 운영체제를 처음부터 쭈우욱 순서대로 공부하고 싶으신 분들을 위해 뒤죽박죽으로 게시된 글들을 순서대로 정리해봤어요 # 운영체제 책 추천 운영체제하면 뭐니뭐니 ..
State Pattern OOP에서는 프로그램 대상을 클래스로 표현함 state는 '상태 = 사물의 모양이나 형편'을 의미 상태를 클래스로 표현하면 클래스를 교체해서 '상태의 변화'를 표현할 수 있음 Strategy Pattern과 조금 유사함 __ init __ property로 state (기본 state는 'green') setState 현재 state를 설정할 수 있는 함수 Speak State에 따라서 녹색이면 green light 빨강이면 red light 출력 Wait Wait 함수를 호출하면 state가 변함 하지만 state가 많아진다면 현재 코드 구조로는 복잡성을 대응하기 어려움 -> 이때 state pattern 사용가능 TrafficLight class __ init __ 기본 st..
Composite Pattern - 컴퓨터의 파일 시스템에는 디렉터리라는 것이 있고, 디렉터리 안에는 파일이 있거나 다른 하위 디렉터리가 있기도함 - 하위 디렉터리 안에는 또다른 하위 디렉터리가 있음 - 마치 상자안의 상자 같은 구조. 즉 재귀적 구조를 가짐 - 디렉터리 엔트리를 차례대로 조사할때, 그릇과 내용물을 같은 종류로 취급하면 편리할 수 있음 - 그릇을 내용물과 동일시하여 재귀적인 구조를 만들기 위한 디자인 패턴을 composite 패턴이라고 함. - 한 object의 그룹과 그 object의 싱글 instance가 같은 타입으로 취급되는 패턴 - composite pattern을 통해 object들을 트리 구조로 구성할 수 있음 - 하나의 object와 그 object가 들어있는 group을 ..
Flyweight Pattern 동일한 것을 공유해서 메모리 낭비 없애기 • Flyweight는 플라이급 이라는 의미로, 권투에서 가장 체중이 가벼운 체급을 의 미함 • 디자인패턴에서는 오브젝트를 가볍게 하기 위한 것의 의미에서 사용 • 오브젝트는 컴퓨터 내부에서 가상적으로 존재하는 것이기 때문에 무겁다 또는 가볍다라고 표현은 실제 무게가 아닌, “메모리의 사용량”을 의미하는 것 • 객체를 만들때 그 객체를 저장하기 위해서 메모리가 확보되는데, 객체를 많이 만 든다고 생각해보면 그 객체가 차지하고 있는 단위 메모리가 작을 수록 가벼워짐 • “인스턴스를 가능한대로 공유시켜서 쓸데없는 메모리를 할당하지 않도록 한다.” • 이미 만들어져 있는 인스턴스를 이용할 수 있으면 그것을 공유해서 사용 • Dog은 na..
Bridge Pattern • Abstraction과 implementor을 분리해서 independent하게 만든다. • Abstraction과 implementor 사이에 다리를 놓는 역할 • Animal을 Boat, Car, Airplane 중에 태워야 함 • Class 구조 고려하지 않고 코딩을 한다면 Animal 2종류 운송수단 3 종류 , 즉 6(2x3=6)가지 클래스를 따로 만들어줘야 함 • 만약 더 많은 종류가 생기면 복잡해짐 -> Bridge Pattern 생각해볼 수 있음 • Vehicle class를 만들어 Base class로 삼고 Boat, Car, Airplane class는 Vehicle class를 상속받는다. • Vehicle class는 Animal을 property로 갖..
Decorator Pattern 스펀지 케이크가 1개 있다고 가정! 크림만 바르면 아무 모양이 없는 크림케이크가 됨 여기에 딸기를 얹으면 딸기 케이크가 되고, 초콜릿을 장식하고 이름을 쓰고 초를 꽂으면 생일케이크가 됨 스펀지케이크도, 크림케이크도, 딸기케이크도 생일케이크도 처음에는 모두 다 같 은 스펀지 케이크지만 장식을 하면 목적에 맞는 케이크가 되는 것 객체도 이런 식으로 장식의 기능을 하나씩 추가하면 좀 더 목적에 맞는 객체가 됨 이러한 패턴을 데코레이터 디자인 패턴이라고 함 Component는 내용물 ConcreteComponent는 구체적인 내용물 Decorator 장식 Decorator pattern은 이름에서 알 수 있듯이 Object를 꾸며주는 역할 원하는 기능으로 감싸서 사용할 수 있게 ..
구조체의 bit_field란? 구조체의 정수 타입의 멤버 변수를 비트 단위로 쪼개서 사용할 수있도록 하는 방법이다. Struct 구조체이름{ 정수형type 변수명 : 비트수 } 와 같이 사용한다. (정수형type 은 (unsigned/signed) char, short, int, long 이 있다.) 예를 들어서 bit_field 구조체 안에 unsigned char a : 3; unsigned char b : 2; 라고 코드가 작성되어 있다면 bit_field 구조체는 char 타입 1바이트(8비트)를 메모리에 할당하고 a가 3비트, b가 2비트를 사용한다. 만약에 사용할 비트 합이 할당할 데이터 타입보다 크다면 (예를들어 비트의 총 합은 10비트인데 unsigned char은 8비트) 할당할 데이터 ..
struct은 구조체라고 한다. 구조체는 하나 이상의 서로 다른 종류의 변수들을 묶어서 새로운 자료형을 정의하는 것이다. 구조체를 사용하면 연관된 변수들을 하나로 묶어서 관리함으로써 데이터 관리에 유용하다. 따라서 데이터 양이 많아지면 유리한 편이다. 사용할 때에는 struct 라는 키워드를 사용한다. 구조체의 멤버에 접근하려면 구조체 변수를 통해서 구조체 멤버의 값을 참조 해야한다. 멤버에 접근할 때에는 .(dot) 을 사용하는데 이를 직접 접근이라고 한다. 예를 들어 다음과 같다. [구조체 변수명].[구조체 멤버] st1.name union은 공용체라고 한다. 공용체도 struct와 같이 사용자가 정의한 자료형인데 다른 점이 있다면 공용체는 메모리 공간을 공유한다. 예를 들어서 구조체에서 char a..
Facade Pattern 프로그램이라는 것은 점점 커지는 경향이 있음 많은 클래스가 만들어져 서로 관계를 맺으면서 복잡하게 됨 상호 관련된 많은 클래스를 적절하게 제어해야 함 그 처리를 실행하기 위한 창구 역할을 하는 별도의 인터페이스를 두는 것 Facade 는 건물의 앞면을 의미한다 -> Facade Pattern 이란 건물의 앞면처럼 그 뒤쪽의 복잡함은 내부에 숨기고 간단한 인터페이스만 제공 Client는 여러 라이브러리와 클래스를 필요로 하는 상태 이런 경우 여러 클래스나 라이브러리를 조합해서 더 간단한 인터페이스를 제공해주는 클래스를 생각해볼 수 있음. -> Client는 복잡한 클래스와 라이브러리 상대할 필요없이 간단한 인터페이스만 제공하는 Facade Pattern 사용해서 더 쉽게 개발 우..
QtSpim 이란? MIPS 프로세서의 시뮬레이터로서, 어셈블리 코드를 실행하기 위해 설계된 소프트웨어이다. 편집 공간이 따로 존재하지 않고 작성된 코딩파일을 동작시킬 수 있다. (SPIM은 "MIPS"를 거꾸로 변형한 단어이다.) https://sourceforge.net/projects/spimsimulator/files/ spim mips simulator - Browse Files at SourceForge.net This directory contains compiled, installable copies of Spim for various operating systems: QtSpim: QtSpim_*_Windows.zip -- Windows (32 or 64 bit) QtSpim_*_mac...
Translation and Startup Translation and Startup Translation Example • 0 ~ 100의 정수 제곱합을 계산하고 출력 label : 주소를 symbolic하게 나타낸 것 sd : 8바이트의 데이터를 어딘가에 저장해라. mips 명령어에 존재X. 실제 Assembler에 의해서 두개로 바뀐 걸 볼 수 있음. macro : 반복되는 코드들을 간단하게 표현해서 사용 comment : 주석. mips에서는 #을 이용 Translation 컴파일러 – Inputs: • Programming language code 및 명령어 집합 • 메모리 및 레지스터 구성 – Output: Assembly language code – Compiler’s function • S..
Concurrent Processes(동시실행 프로세스) (1) 실행 중인 프로그램 시스템은 여러 동적 동시 프로세스(dynamic concurrent processes)로 구성된다. IPC와의 공동 작업 프로세스의 set Concurrent process 프로그래밍 툴 • Concurrent languages (Ada, Java, PathPascal, Modula II) • C, C++,.. concurrent programming 을 위한 system call (Linux, UNIX, Win32 Environment) Applications (Objectives) • Networked (or distributed) applications – 네트워크 앱 : 클라이언트 프로세스, 서버 프로세스 – Di..
structural design pattern : 클래스 간 구조/관계를 정의하는 패턴 Adapter Pattern 하나의 인터페이스를 다른 인터페이스로 전환하는 역할 -> 이러한 역할을 Adapter Pattern에도 적용 '이미 제공되어 있는 것'과 '필요한 것' 사이의 차이를 없애주는 디자인 패턴을 Adapter Pattern이라고 함. ex) 교류 110볼트 콘센트 ~ Adapter ~ 직류 12볼트의 노트북 Adapter Pattern 은 Wrapper Pattern 으로 불리기도함 Wrapper 는 '감싸는 것'이라는 의미가 있는데 무엇가를 포장해서 다른 용도로 사용할 수 있게 교환해주는 것이 wrapper이며, adapter 라고 함 두 가지의 종류 - 클래스에 의한 Adapter Patte..
Prototype Pattern 이란? - 종류가 너무 많아 클래스로 정리되지 않는 경우 - 클래스로부터 인스턴스 생성이 어려운 경우 - 프레임워크와 생성하는 인스턴스를 분리하고 싶은 경우 이런 경우 클래스로부터 인스턴스를 만드는 것이 아니라 인스턴스를 복사해서 새로운 인스턴스를 만드는 게 좋음. 프로토타입 패턴을 적용하기 위해서는 Clone()이라는걸 가지고 있어야한다. 자기 자신을 복사할 수 있도록! 그리고 구체적인 클래스 정의를 해서 원형의 프로토타입을 상속 받는다. class Cat: def __init__(self): self.color = None self.eye_color = None self.nose_color = None self.tail_color = None self.name = No..
수업시간에 과제를 구현하면서 빅 엔디안과 리틀엔디안에 관련해서 이해해야하는 부분이 있었다. https://www.save-editor.com/tools/wse_hex.html HEX & LITTLE ENDIAN CONVERTER - SAVE-EDITOR.com www.save-editor.com 여긴 내가 잘 구현했는지 확인해보기 위해서 이용했던 엔디안 변환 사이트 bit 와 byte 일단 컴퓨터는 모든 데이터를 2진수로 표현하고 처리한다. bit 는 데이터의 최소 단위이다. 0아니면 1만 저장이 가능하다. byte는 이러한 bit가 8개 모여서 구성된다. 이건 한 문자를 표현할 수 있는 최소 단위이다. 컴퓨터는 데이터를 메모리에 저장할 때 byte 단위로 나누어서 저장을 한다. 보통 컴퓨터가 저장하는 ..
C언어에서는 텍스트파일과 바이너리 파일은 구분해서 사용된다. 잘못 읽어 들이는 것을 방지하기 위함이다. 먼저 텍스트 파일은 문자로 구성된 파일이며, 대부분 ASCII(아스키코드)문자로 이뤄진 파일이나 사람이 사용하는 한글, 영문 같은 문장들로 이뤄진 파일이다. 텍스트 파일은 연속적인 라인들로 구성되어 있으며 그 예로 확장자가 cpp인 프로그램 소스코드 파일이나 메모장에서 작성한 txt 파일 등이 있을 것이다. 이러한 텍스트파일과 달리, 이진파일은 데이터로 구성된 파일이다. 사람이 읽을 수는 없지만 컴퓨터는 읽을 수 있는 파일이다. 모든 파일은 0과 1로 이루어져 있으며 바이너리 파일이라고도 부른다. 텍스트파일은 라인들로 분리되는데 이진파일은 라인들로 분리되지 않는다. 그리고 모든 데이터들은 문자열로 변환..
Linux File System 리눅스 커널은 몇 가지로 모듈화 되어 있음 가장 중요한 것은 disk 안에 있는 파일을 관리 한다는 것 파일에 관련된 인터페이스를 유저에게 제공하는 system call API를 제공 유저는 이 system call API를 통해 커널에 접근 가능 그리고 커널은 자신이 관리하는 구조에 의해서 파일에 대한 쓰기 읽기/접근 권한/삭제/생성 을 관리한다. - 파일 시스템 안의 각각의 파일들은 inode 를 가진다. - inode 는 파일에 대한 정보를 관리하는 자료구조이다. - 일반적으로 파일 시스템은 파일의 데이터 영역(실제 파일이 적혀 있는)과 파일 정보를 관리하는 영역(Metadata)으로 나뉨. Metadata 중 하나가 inode - inode contents (C s..
Linux System Calls File descriptor I/O ->리눅스는 posix interface를 따른다. • open(); close(); creat(), read(); write(); • seek(); // random access • fcntl(); // for file/record locking Process control Thread programming IPC Signal handling Memory management Synchronization Time management Network socket API (TCP, UDP) System Calls & Library Calls for File I/O System Calls for File d..
Shell? - 유저가 운영체제에 접근하도록 해주는 interface(명령어 기반) - Functionality : * 다른 프로그램을 (command line으로) 실행 * 파일 관리(OS안의 파일과 프로세스를 command line으로 관리) 터미널에서 command를 치면 shell을 통해서 kernel(즉, OS)에 전달해서 기능함 * 프로세스들을 관리 - A program like any other one - log on 할때 실행됨. 흔히 사용되는 Shells - /bin/sh The Bourne Shell / POSIX shell – /bin/csh C shell – /bin/tcsh Enhanced C She – /bin/ksh Korn shell – /bin/bash Free ksh cl..
C언어 데이터 타입의 종류와 연산자의 동작을 표로 정리해봤다! 자료형 설명 byte 범위 정수형 부호있음 Short Short형 정수 2 -32768 ~ 32767 Int 정수 2 or 4 -2147483648 ~ 2147483647 Long Long 형 정수 4 -2147483648 ~ 2147483647 부호없음 Unsigned short 부호없는 short형 정수 2 0 ~ 65535 Unsigned int 부호없는 정수 2 or 4 0 ~ 4294967295 Unsigned long 부호없는 long형 정수 4 0 ~ 4294967295 문자형 부호있음 Char 문자 및 정수 1 -128 ~ 127 부호없음 Unsigned char 문자 및 부호없는 정수 1 0 ~ 255 부동소수점형 Float ..
von Neumann 아키텍처와 Harvard 아키텍처를 비교해서 정리해보았다. CPU 레벨에서 메모리에 접근하는 방법에 관해 고려해야할 두 가지 설계(design)가 있는데, 첫번째는 Von Neumann architecture이고 두번째는 Harvard architecture이다. 메모리 사용방식에 따라서 두 프로세서 architecture를 분류할 수 있다. 이 두 architecture의 중요한 차이점은 Von Neumann architecture 에서는 동일한 메모리와 버스가 프로그램을 실행하는 데이터 및 명령어를 저장할 수 있다는 것이다. 프로그램 메모리와 데이터 메모리에 동시에 접근할 수 없기 때문에 Von architecture는 병목 현상에 취약하고, 이것은 시스템 성능에도 영향을 미친다..
문제 1 1.1: 1개, 2개, 4개, 8개의 코어를 사용하는 경우, 프로그램의 실행시간은 얼마인가? [풀이] CPI란, 명령어 하나를 처리하는데 필요한 클럭 사이클 수를 의미한다. 문제에서 주어진 프로세서에 대해 정리하자면 다음과 같다. 산술 명령어 적재/저장 명령어 분기 명령어 CPI 1 12 5 명령어 개수 2.56E9(2.56x109) 1.28E9 2.56E8 프로세서는 2GHz 의 클럭 주파수로 동작하는데, 이는 1초에 클럭 사이클이 2*10^9번 임을 뜻하며 클럭 속도가 2*10^9 라는 말과 같다(1GHz = 10^9). 프로그램의 실행시간 = CPU 클럭 사이클 수 / 클럭 속도 = CPU 클럭 사이클 수 * 클럭 사이클 시간 CPU 클럭 사이클 수 = 명령어의 수(IC) * CPI 프로그..
Singleton Pattern 개요 글로벌하게 접근가능한 단 한개의 객체만을 허용하는 패턴 - 클래스에 대한 단일 객체 생성 - 전역 객체 제공 - 공유된 리소스에 대한 동시 접근 제어 - 글로벌 액세스 지점을 제공하는, 단점이 거의 없는 검증된 패턴 생성자를 private로 선언하고, 객체를 초기화하는 static 함수를 만들어 구현할 수 있음. 첫 호출에 객체가 생성되고, 그 후 클래스는 동일한 객체를 계속 반환함.] class Singleton(object): def __new__(cls): if not hasattr(cls, 'instance'): print('create') cls.instance = super(Singleton,cls).__new__(cls) else: print('recyc..
Builder Pattern - object의 생성과정이 복잡할 때 이를 간단하게 만들어 줌 ex) 하나의 오브젝트를 생성할 때 여러개의 argument가 필요할 때 Builer패턴이 쉽게 만들어줄 수 있음. Builder Pattern의 개념 Diagram 더 세부적인 객체를 생성할 수도 있을 것이다. 예시로 vector class를 만든다고 해보자 vector는 N차원 array 이며, 우리가 시각화 할 수 있는(Graph로 표현할 수 있는)건 2,3차원 이다. 2D/3D vector object를 생성할건데 builder pattern을 통해 만든다고 해보자 * 기능은 내가 추가 해보기! import math from multiprocessing import set_forkserver_preload..
Creation Design Pattern(생성 디자인 패턴) 오프젝트를 생성하는 방법을 다루는 패턴 - Factory Pattern - Abstract Factory + Factory Method Pattern - Builder Pattern - Singleton - Prototype Factory Pattern - 객체지향에서 팩토리란 다른 클래스의 객체를 생성하는 클래스를 말함 - 일반적으로 팩토리는 객체와 관련 메소드로 구성 - 클라이언트는 특정 인자와 함께 메소드를 호출하고 팩토리는 해당 객체를 생성하고 반환. 공장은 함수 또는 클래스로 나타낼 수도 있음 공장에 원하는 물건을 만들어 달라고 요청하면 그 제품을 만들 수 있음. Robot은 추상클래스 함수(인자) 간접적으로. 생성과정에 관여 X U..
What is UML? - 시스템을 시각화 하거나 시스템의 사양이나 설계를 문서화하기위한 표현방법 - 통합 모델링 언어는 객체 지향 프로그래밍 소프트웨어 집약 시스템을 개발할 때 산출물을 명세화, 시각화, 문서화할 때 사용. - 일반적으로 UML의 범위는 매우 넓지만, 여기선 클래스 다이어그램 및 시퀀스 다이어그램에 대해서만 커버함 - Code Pattern들을 표현할 때에도 유용함. 클래스 다이어그램 : 클래스와 계층관계 하위 클래스(자식 클래스)가 상위클래스(부모 클래스)를 참조하고 있다 -> 화살표로 표시! 클래스 다이어그램 : 구현관계 클래스 다이어그램 : 집약(aggregation) 클래스의 관계 시퀀스 다이어그램 UML의 시퀀스 다이어그램은 프로그램이 작동할 때 어떤 메소드, 추상클래스가 어떤..
SOLID principles Single Responsibility Open-Closed Liskov Substitution Interface Segregation Dependency Inversion Single Responsibility Principle(SRP)(단일 책임 원칙) : 단일 책임 원칙이란 모든 클래스는 하나의 책임만 가져야함. - 클래스 구현할 때 한가지 기능에만 중점을 두기. 두가지 이상의 기능이 필요할 때에는 클래스 나누기 - 장점 : 특정기능 수정할 때 관련 클래스 외에는 건드릴 필요 없음. - 한 개의 클래스에 여러 기능이 있었다면(SRP 지키지 않았다면)? 관련된 모든 클래스 수정해야하는 상황 발생 가능 - add 함수는 덧셈만 함 - numPrint 함수는 숫자 출력만 함..