| 니앙팽이 - 컴퓨터 구조 | 캐시 Cache
·
CS/OS
Cache 주소가 키로 주어졌을 때 그 공간에 즉시 접근할 수 있다는 것은캐시가 하드웨어로 구현한 해시 테이블(Hash table)과 같다는 의미다.📄 1. 캐시가 생긴 이유. 1). 캐시 생성의 배경 프로세서(CPU)는 날마다 빨라지는데.. 메모리(DRAM)의 속도는 너무 더디다. CPU와 Memory간 Read/Write에 생기는 병목이 Memory Wall 이라고 한다.따라서, CPU내부에 L1, L2캐시를 두고 Memory에는 L3 캐시를 두어 속도를 개선하여빠른 데이터 접근이 가능하다.만약 어디있는지 모른다면 O(N)만큼 걸릴것이다.하지만, 어디있는지 알기만 하면, 예측할 수 있다면 시간은 적게 걸릴것 이다.또한 알고 있다 하더라도, 페이지라는 단위로 관리되어 (SSD -> RAM)으로 적재할..
| 니앙팽이 - 멀티스레딩 | 7 | Blocking I/O & NonBlocking I/O 그리고 Synchronous & Asynchronous
·
CS/OS
7. IO-Bound & CPU-Bound 📄 1. 사전에 염두해야 하는 용어 1). 작업 요청자와 결과 제공자의 관계 ① IO (Input / Output) Bound 작업에서 작업 요청자 : 소프트웨어 애플리케이션System Call을 IO 장치 호출하는 SideSystem Call 호출은 CPU Bound 이다.결과 제공자 : OS, Hardware, IO DiviceSystem Call에 대한 결과를 제공하는 측이고 "IO Completion Port (완료 포트)"를 통해 CPU에 전달한다.사용가능한 결과를 만드는 작업은 DMA나 하드웨어 인터럽트 같은 매커니즘으로 OS나 하드웨어에 의해 IO Bound 작업이 수행된다.절대로 이 결과를 생성하는데 까지 CPU Bound 작업이 아니다!Inte..
| 니앙팽이 - 멀티스레딩 | 6 | 스레드
·
CS/OS
⏱️ 6. 스레드 ① 스레드간 공유가능한 데이터프로세스 ID : 메타데이터파일 : 애플리케이션이 읽고 쓰기위해 여는 파일. 코드 : CPU에서 실행되는 프로그램의 명령어 힙(Data) : 애플리케이션에 필요한 데이터② 스레드간 공유 되지 않는 데이터스택 : 메모리영역 지역 변수, 함수레지스터 PC : 명령 포인터📄 1. 스레드 CPU에서 실행되며, 프로세스보다 더 작은 "최소 수행단위" 하나의 프로세스에는 동시에 실행되는 여러개의 스레드가 존재함위의 설명 그대로 코드 수행를 하는 최소 수행 단위 이며, 프로세스보다 더 적은 비용을 사용한다.그 이유는 프로세스의 자원을 일부 공유를 하고, 개별적인 자원이 프로세스보다 더 적기 때문.생성과 삭제가 빠르고, Process Context Switcing VS ..
| 니앙팽이 - 멀티스레딩 | 5 | 성능 평가 척도
·
CS/OS
⏱️ 5. 성능 평가 척도 앱 성능에 대한 두가지 기준 (지연 시간 & 처리량) 성능은 시나리오와 용례에 따라 완전히 다르게 측정될 수 있습니다.병행 실행의 가지가 있는지 없는지는 다음 요소를 확인해 봐야한다.① Latency (지연시간) : Data Parallelism 하나의 큰 작업을 SubTask로 나눠서 병렬로 진행할때 주로 사용한다Ex). 연산, 정렬, 분할정복② Throughput (단위시간당 처리량) : Task parallelism 작업간 서로 별로 연관이 없는 독립적인 Job을 처리할때 사용함Ex). 비동기 I/O, 네트워크, DB📄 1. 지연시간 (Latency) : 하나의 Task(작업)을 처리하는 시간 1). Optimize Latency 멀티 스레딩으로 지연시간의 최적화를 달성..
| 니앙팽이 - 멀티스레딩 | 4 | 프로세스
·
CS/OS
⏱️ 4. 프로세스 📄 1. 프로세스의 PCB 구성 요소 PCB 구성 요소설명① 프로세스 식별자 (PID)② 프로세스 이름③ 프로세스 상태 정보1. 준비, 실행, 대기, 종료 2. 프로그램카운터 (PC) : 다음에 실행할 명령어 주소 3. CPU 레지스터 값④ 가상 메모리 정보가상 메모리와 실제 메모리 매핑 정보⑤ 스케쥴링 정보1. 우선순위 2. CPU 점유 시간 3. 프로세스가 입출력 작업을 완료할 때까지 대기해야하는 정보⑥ 자원의 타입1. CPU 점유 시간 2. 메모리 공간 3. I/O 장치📄 2. 프로세스 상태 & 상태 전이 상태 (Node) & 상태 전이 (Arrow) 1). 상태 상태설명① 생성 (new)1. "Ready" 상태로 이동하기 전의 초기화 단계 2. PCB 생성② 준비 (Rea..
| 니앙팽이 - 멀티스레딩 | 3 | 프로그램을 처리하는 발전 흐름
·
CS/OS
⏱️ 3. 프로그램을 처리하는 발전 흐름 프로세스는 활동 단위다. 운영체제로부터 시스템 자원을 할당받는 활동의 단위프로세스는 운영체제에 의해 메모리 공간과 CPU 자원을 할당 받는다.📄 1. 프로세스 처리 발전흐름 ① 다중 프로그래밍 시스템 (Multi Programming) 여러 프로세스를 메모리에 올려놓을 수 있지만 동시또는 병렬적이지는 않음.한 프로세스가 모두 실행되야 다음 프로세스가 실행된다. #1 대기시, #2 실행#1 에 I/O 작업실행시 대기상태로 가지만, 그래도 Non-Blocking I/O (파일, 네트워크통신, 마우스키보드 입출력 장치)② 시분할 처리 시스템 (Multi Tasking) 드디어 프로세스의 동시성(Concurrency) 실행 가능하고 빠른 응답성의 장점을 얻음점유시간을..
| 니앙팽이 - 멀티스레딩 | 2 | OS가 메모리를 관리하는 방법
·
CS/OS
⏱️ 2 OS가 메모리를 관리하는 방법 📄 1. OS 설명이미지① 전제로 일단 프로세스가 실행될때, 아무곳에나 메모리를 무작정 접근할 수 없다.② 만약 접근하게 되는 일이 생긴다면 접근을 시도하는 프로세스를 OS에서 Inturrupt를날리고 강제로 종료한다. 그 메세지는 익히 아는 segment fault (core dumped) ③ 따라서 실행되려면 프로세스가 메모리를 OS에게 요청해야 됨. OS가 ReadWrite할 수 있는 공간을 할당해준다.📄 2. Memory Fragmentation 빈 메모리가 있지만 사용할 수 없어 메모리가 낭비된다는 공통점이 있다. 단편화 때문에 새로 할당할 크기에 맞는 메모리를 찾으러 하나하나씩 탐색하는 과정으로 힙 메모리가 느린것에 한몫한다.일반적으로 스택은 높..
| 니앙팽이 - 멀티스레딩 | 1 | 스택과 힙
·
CS/OS
⏱️ 1 스택과 힙 📄 1. 두 메모리간 비교 1 뭘 저장하나?, 2 속도 (접근, 생성해제)?, 3 데이터 접근법, 공유 범위?,4 최대 할당 사이즈는?, 5 메모리 관리비교Stack : 정적 메모리Heap : 동적 메모리① 저장 하는 것함수내 지역변수, 매개변수, this 매개변수 참조변수(주소값)함수/메소드 호출 정보(Stack프레임)객체 그 자체 저장(객체 멤버 변수들도) (new)② 속도 (생성과 해제 & 데이터 접근)빠르다.느리다③ 접근 방법과 공유 가능성1. LIFO 순서 2. 함수내 블럭에서만 접근 가능1. 무작위 접근 2. 프로그램간 공유가 가능하다.④ 최대 할당 사이즈1. 컴파일 타임에 사이즈 제한2. arr[]와 같은 문법3. 약 1M 혹은 500M정도 작다.1. 고정 크기가 없지만..
| 니앙팽이 - 멀티스레딩 | 0 | 하드웨어와 캐시 메모리
·
CS/OS
⏱️ 0. 하드웨어 📄 1. 프로세서(CPU) : 명령어 처리를 위한 하드웨어 1). CU (Control Unit) 프로세스 형태로 메모리에 올라간 명령어 주소들중PC, IC가 가르키는 주소의 Instruction code를 "인출, 해독"한다.명령어 실행에 필요한 "제어 신호" RAM, ALU, I/O에 보내는 장치2). ALU 연산을 수행하는 장치3). Register RAM이외에 CPU내부에 내장된 기억장치, 엑세스 속도가 가장 빠름Instruction Register (IR)프로세스 형태로 메모리에 올라간 명령어들 중 현재 수행중인 명렁어를 저장한다Program Counter (PC)6502에선 16bit 레지스터로프로세스 형태로 메모리에 올라간 명령어들 중 다음에 수행해야 하는 명렁어를 저장..
| 니앙팽이 - IoC Container | 2 | 의존성 주입과 제어권 역전 (Dependency Injection & Inversion of Contol)
·
CS/SW 공학
♽ 1. DI & IoC 📄 1. 의존성 주입/관계 주입 (Dependency Injection) 의존 관계를 가지는 방법은 다음 경우가 있겠다. "A.cs 내에서 new()를 통한 객체 생성으로 의존 관계"를 만들수도 있지만. "new()객체를 다른 외부의 코드 B.cs에서 생성하고 A.cs에 주입(객체 전달)"을 하는 방식이 있겠다. 대표적으로 생성자를 통해서, Setter함수를 통해서, 인터페이스 Setter로 일괄 처리가 가능할 수도 있겠다. 여기서 DI(의존성 주입) 이라 함은 후자의 방식이 되겠다. 즉, 1). Injection : 주입을 한다? Caller/Client(A.cs)에서 Service(인스턴스)를 생성하는게 아니라 Injector(B.cs)라는 외부 클래스에서 주입 되는 방식. ..