전체 글 131

[OS] #7. 프로세스간 통신 ( IPC, Inter-Process Communication )

* 프로세스간 통신 ( IPC, Inter-Process Communication ) IPC 링크 ( 위키 ) => 프로세스들끼리 데이터를 주고 받는 방식. * 통신 방법 1. Message Passing ( 메시지 큐 ) 이용. => 커널에서 메시키 큐를 관리. => 시스템 콜이 빈번할 수 있기에 비용이 크다. => 양방향 통신을 위해서 총 2개가 필요하다. 2. RAM 을 이용하는 방식 ( Shared Memory ) 공유 메모리 링크 ( 위키 ) => 메모리 부분은 굉장히 민감하므로 OS 가 강하게 확인한다. ( 정확하고 엄격함. ) => 할당 시, 크기를 고정해야한다. => 'Shared Memory 기법' 을 쓸 때 크기는 '고정 길이' 라는 사실을 주목해야함. 3. Socket 을 이용하는 방..

[OS] #6. CPU ( 자원 ) 스케줄링

* CPU 스케줄링 스케줄링 링크 ( 위키 ) => 작업 스케줄링 ( Job Scheduling ) 이라고도 한다. * 쓰레드마다 우선 순위가 존재한다. * GUI 같은 경우, 우선 순위가 높다. ( 사용자에게 눈으로 보여주어야 하기 때문에. ) * 압축해제 같은 경우, 우선순위가 상대적으로 낮다. => 입출력 I/O 처리는 매우 느리다. ( 항상 느리다고 생각. ) 그래서 비동기 방식으로 I/O 를 처리하는 것이 중요하다. ( non-blocking I/O ) => I/O 처리할 때, 쓰레드가 다른 일 ( ex.GUI Rendering ) 을 수행하도록 한다. * 선점형 ( Preemtive, 강제한다. ) / 비선점형 ( non-Preemtive 강제하지 않음. ) 어떤 쓰레드가 CPU 를 사용할 때..

[OS] #5. 프로세스 ( Process ) 와 쓰레드 ( Thread )

* 프로세스 프로세스 링크 ( 위키 ) => 메모리에 올라가 있는 실행 중인 프로그램. => 프로그램을 메모리에 올리는 행위를 '인스턴스화 (실행)' 한다고 말함. => 프로세스 마다 '가상 메모리 ( Virtual Memory )' 가 주어진다. * 쓰레드 ( Thread ) 쓰레드 링크 ( 위키 ) => 프로세스를 CPU 가 실행하는 '단위'. * 시분할 방식 시분할 시스템 링크 ( 위키 ) => 여러 프로세스를 시간적으로 분할해서 사용한다. 마치 여러 개의 프로세스가 '동시에 실행하는 것처럼' 느끼게 됨. * PCB ( Process Control Block ) PCB 링크 ( 위키 ) => 운영체제가 프로세스를 관리하기 위해서 필요한 정보. => 프로세스를 표현한 정보. * TCB ( Thread..

[OS] #4. CPU ( 중앙 처리 장치 )

* CPU ( 중앙 처리 장치 ) CPU 중앙처리장치 링크 ( 위키 ) CPU 중앙처리장치 링크 ( 나무위키 ) * CPU 성능 기준 1. 클럭 ( GHz 단위로 표현됨. ) 2. IPC ( Instructions Per Cycle, 클럭당 명령어 처리 횟수 ) ( 링크 ) 3. 코어 개수 * CPU 구성 요소 1. ALU ( 산술 논리 장치 ) 2. CU ( 제어 유닛 ) 3. 레지스터 4. 기타... * ALU ( Arithmetic and Logical Unit, 산술 논리 장치 ) ALU 링크 ( 위키 ) => 뎃셈, 뺄셈 등 두 숫자의 산술 연산 & 논리합, 곱... 등 논리연산을 계산하는 '디지털 회로' 이다. * CU ( Control Unit, 제어 장치 ) CU 링크 ( 위키 ) => 입..

[OS] #3. DMA ( Direct Memory Access )

* DMA ( Direct Memory Access ) DMA 링크 ( 위키 ) => CPU 의 도움 없이 '독립적' 으로 메인 메모리에 접근할 수 있도록 해주는 컴퓨터 기능. => CPU 의 작업을 최소화하기 위한 목적으로, 메모리에 직접 접근한 작업이 완료되었다는 인터럽트만 CPU 에게 전달한다. => 이 때, CPU 는 다른 일을 처리할 수 있기 때문에 효율성이 좋다. => CPU 가 어떤 장치에게 요청을 보내면 해당 장치는 약속된 RAM 메모리 어딘가에 데이터를 직접 쓴다. => '캐시 일관성 문제' 가 일어날 수 있다. 장치는 RAM 과의 교류 밖에 되지 않아서, 이전에 값이 먼저 캐시 메모리에 적재되어있다면 RAM 에서 바뀐 데이터를 보지 못할 수 있다. 참고 자료 https://www.you..

[OS] #2. Interrupt ( 인터럽트 )

* Interrupt ( 인터럽트 ) 인터럽트 링크 ( 위키 ) => '끼어들다, '중단시키다' => CPU 가 하던 일을 중단하고 발생한 상황을 처리한 후 다시 돌아온다. * Interrupt 종류 인터럽트 링크 ( itwiki ) * 인터럽트 동작 순서 만약, 인터럽트가 발생해 CPU 를 다른 곳으로 일하게 한다면 현재 상태를 보존하고 넘어가야 한다. 다시 돌아왔을 때, 그 상태로 되돌아가 작업해야하기 때문이다. => 상태로 저장되는 값들 중에 PCB, PC 가 속해있다. => 인터럽트가 발생하게 되면 현재 진행되고 있는 일을 '일시 정지' 이 때, 해당 인터럽트에 대한 처리 로직이 작동하게 되는데 이것은 'ISR ( 인터럽트 서비스 루틴 )' 이라고 한다. => 'ISR' 은 인터럽트를 요청한 장치..

[OS] #0. 백그라운드 프로세스 ( Background Process )

* 백그라운드 프로세스 ( Background Process ) 백그라운드 프로세스 ( 위키 ) => 사용자의 간섭 없이 뒷 배경에서 실행 중인 컴퓨터 프로세스. * Daemon (리눅스) / Service (윈도우) 데몬 ( 위키 ) 데몬 ( 위키.해쉬 ) 윈도우 서비스 ( 위키 ) "fork off and die" 방식 프로세스를 생성 후, 자식을 분기한 자신을 죽인다. 이 때, 고아가 된 프로세스를 'Init' 이라는 시스템 프로세스가 거둬들인다. ex) ftpd, mysqld, httpd ... 등 => 대부분의 데몬은 '관리자 권한' 으로 실행되어짐. => 백그라운드에서 계속 실행되기 때문에 너무 많은 데몬 or 서비스가 있다면 자원 소비가 크다. * 고아 프로세스로 만드는 이유는 뭘까 ?? (..

[OS] #1. 하드웨어 / 소프트웨어 통신

* 하드웨어 ( H / W ) Physical ( 물리적 ) => 보통 실제 장치들을 말한다. ex) CPU, RAM, SDD, HDD, Sound, Video, NIC.... * 소프트 웨어 ( S / W ) Logical ( 논리적 = 'Vritual' ) => 물리적 장치들로 이루어진 컴퓨터가 작동되게 하는 프로그램. * I/O 입출력 통신 * API ( Application Programming Interface ) https://ko.wikipedia.org/wiki/API => 개발자가 원하는 행동으로 시스템을 제어하기 위해 커널 ( 운영체제 ) 한테 요청하는 인터페이스. => 결국, 함수란 소리다. ( C++ 순수 가상 함수 ) ex) C 언어의 "printf 함수" 즉, 개발자가 Userm..

@.NET Framework

.NET Framework 의 구성 * CLI ( Common Language Infrastructure ) https://ko.wikipedia.org/wiki/%EA%B3%B5%ED%86%B5_%EC%96%B8%EC%96%B4_%EA%B8%B0%EB%B0%98 => 실행 코드와 런타임 환경을 설명하기 위해 MS 에서 개발한 '오픈 규격'. => CLI 는 단지 '규격' 이란 것이 중요하다. 1. CTS ( 공통 형 체계 ) 2. 메타데이터 3. CLS ( 공통 언어 규격 ) 4. VES ( 가상 실행 시스템 ) => 해당 규격으로 MS 에서 만든 것이'CLR'이다. * CLR ( Common Language Runtime ) => JAVA 의 JVM 과 비슷한 역할을 하는 .NET Framework ..

프로그래밍/C++ 2022.08.27

[DX] ##8. FRUSTUM CULLING ( 절두체 선별 )

*FRUSTUM CULLING ( 절두체 선별 ) => 월드상의 모든 물체를 다 그리기엔 비용이 너무나도 크다. => 해당 영역 안에 있는 물체들만 랜더링한다. 저 사다리꼴 모형의 영역을 지정하기 위해서 총 6개의 평면을 정의하고 어떤 하나의 점이 모든 평면의 안쪽에 존재하는지 판별해야한다. 우선 우리는 평면방정식을 알아야한다. * 평면 방정식 * 평면 방정식에서 필요한 요소들은 무엇일까 ?? 1. 평면의 노말벡터 2. 원점과 평면과의 거리 '평면에 원점이 포함될 때' 평면 위의 두 벡터를 안다면 해당 두 벡터를 외적함으로써 우리는 노멀벡터를 구할 수 있다. 이 때, 우리는 한 가지 사실을 알 수 있다. " N • (dot) P1 = 0 " => 노말벡터와 평면 위의 벡터의 내적이 '0' 이라는 것은 서..

DirectX/개념 2022.08.25