전체보기
-
💻 [OS 오퍼레이팅시스템] #11 | Synchronization (상호배제) | 동기화, 세마포어, 스핀락CS/OS 2022. 6. 12. 23:06
💻 Race Condition - Synchronization 쓰레드가 멀티쓰레딩 프로그램에서 같이 일할 때 공유 자원에 접근하는 것. -> 동기화 문제 발생 이 때, 올바르지 못한 결과가 나오는 문제 -> race condition - Race Condition 다수의 프로세스나 쓰레드가 동시에 공유 자원에 접근하고 변경하려고 할 때 발생하는 버그 문제. 공유 자원에 접근할 결과가 다음과 같다. - Non-deterministic한 Incorrect한 결과 - Non-Reproducible (재생산 불가능) 실행 시간에 달려있다. (실행 속도와 스케쥴링 타임 조절 불가능) - 멀티쓰레딩 : CPU 스케쥴러에 의해 '끼어들기(interleaving)'가 발생할 수 있다. -> 예측 불가능 - 멀티프로세서..
-
💻 [OS 오퍼레이팅시스템] #10 | Thread & Synchronization | 멀티쓰레딩, 프로세스와 쓰레드, ULT, KLTCS/OS 2022. 6. 12. 18:49
💻 프로세스와 쓰레드 - 프로세스 실행되고 있는 프로그램 일련의 명령 및 관련 시스템 리소스 집합의 실행으로 특정 지어지는 실행 단위 - 특성 1. 자원 소유권의 단위 2. 실행(프로세스 관점) 단위 또는 스케쥴링(커널 관점) 단위 - 쓰레드 한 프로세스는 단일 실행 순서를 갖는다. 실행 단위는 thread라고 부른다. 또는 LWP(Light Weight Process)라고 하며, 자원 소유 단위는 여전히 프로세스(또는 task)라고 한다. * 프로세스 세분화 -> 실행 단위, 자원 소유 단위 -> '쓰레드' 💻 멀티쓰레딩 - 멀티쓰레딩 한 프로세스에는 한 개 또는 다수의 쓰레드가 존재한다. 단일 프로세스 내에서 다수의 동시 실행 경로를 지원할 수 있는 OS의 능력이다. 쓰레드는 같은 프로세스의 다른 쓰..
-
💻 [OS 오퍼레이팅시스템] #9 | Process Scheduling 3 | 다중프로세서 스케쥴링, SQMS, MQMSCS/OS 2022. 6. 12. 00:34
💻 다중 프로세서 스케쥴링 - 단일 프로세서 스케쥴링 언제(when) 어떤(which) 작업이 실행될지 결정한다. - 다중 프로세서 스케쥴링 언제(when)뿐만 아니라 어디(where)에서 작업이 실행될지 결정 -> 어떤 CPU에게 작업을 할당할지 결정한다. - Issue ready queue를 어떻게 유지할 것인지 affinity를 어떻게 정의하고 활용할 것인지 applications를 어떻게 다중 프로세서에게 할당할 것인지 이질적 조합의 프로세서를 어떻게 관리할 것인지 프로세서들 간의 workload를 어떻게 균형을 맞출 것인지 - HW Issue : Cache Affinity 캐시 친화적 - SW Issue : Concurrency 병행성 캐시 효과로 인해(Memory에서 필요한 정보를 Cache로..
-
⚙️ [컴퓨터 구조] | Verilog를 이용한 회로 설계CS/컴퓨터구조 2022. 6. 9. 23:50
⚙️ HDL 하드웨어 기술 언어 - HDL 하드웨어 기술 언어를 이용하여 매우 복잡한 디지털 회로를 빠르게 설계할 수 있다. verilog나 VHDL은 가장 많이 쓰이는 HDL IEEE standard 1364 ⚙️ Verilog 기초 - 기초 특징 대소문자 구별. 신호 정의할 때 키워드 wire 이용 ex) wire CarryIn; - 숫자 표현법 bit 단위 길이 ' 진법 값 8'd100(10진수) = 8'h64(16진수) = 8'b0110_0100(2진수) = 100 10'h29C(16진수) = 10'b10_1001_1100(2진수) = 668 - module 범위 : 키워드 module로 시작하여 endmodule로 끝남 모듈 이름 : 알파벳으로 시작 가능, 숫자나 기호로 시작 X (예외로 기호 ..
-
♻️[클린코드] #4 형식 맞추기Study/클린코드 2022. 5. 30. 21:37
코드의 가독성에 필수적인 포맷팅 ♻️ 포맷팅이 중요한 이유 - 가독성에 필수적이다 코드를 수월하게 읽어나갈 수 있고, 아마추어처럼 보이지 않는다. 포맷팅이 되어있지 않아 코드를 잘못 해석해 버그를 발생할 수도 있는데 포맷팅을 통해 가독성을 높혀 위험을 줄인다. ex) 줄바꿈 간격 ♻️ 클린코드 포맷팅 - 적절한 길이 유지 엄격한 규칙은 아니지만, 일반적으로 200줄 정도로 제한한다. (그래도 최대 500줄) 코드가 200줄을 넘어간다면, 클래스가 여러 개의 일을 하고 있을 수 있다. -> SRP에 위배된다. - 밀접한 개념은 서로 가까이 다른 개념들끼리 빈 행으로 분리한다. 변수는 사용되는 위치에서 최대한 가까이 선언한다. ♻️ Java Class Declarations - Java Class Decla..
-
♻️[클린코드] #3 주석Study/클린코드 2022. 5. 23. 15:34
♻️ 주석을 최대한 쓰지 말자 - 주석은 나쁜 코드를 보완하지 못한다. 코드에 주석을 추가하는 일반적인 이유 -> 코드 품질이 나쁘기 때문에 설명하려고 주석을 작성하는 경우이다. 주석을 작성할 시간에 코드를 알아듣기 좋게 개선하는데 시간을 보내는 것이 좋다. ex) 코드를 함수로 분리해서, 함수 이름으로 코드의 의도를 표현한다. - 주석은 방치된다. 요구사항에 따른 코드의 변화가 생길 때 주석은 따라가지 못한다. 주석은 그저 주석이기 때문에 컴파일 되지 않고 방치된다. 결국 나중에 의미없는 텍스트가 된다. ♻️ 좋은 주석 주석을 쓸거라면 좋은 주석을 쓰자! - 구현에 대한 정보를 제공한다. 출력 포맷에 대한 정보를 제공 ex) 날짜 출력 형식 주석으로 표시 - 의도와 중요성을 설명한다. ex) 스레드를 ..
-
♻️[클린코드] #2 함수Study/클린코드 2022. 5. 16. 19:07
♻️ SOLID 원칙 - 객체 지향 설계의 5가지 원칙 S.O.L.I.D SRP : 단일 책임 원칙 OCP : 개방-폐쇄 원칙 LSP : 리스코프 치환 원칙 ISP : 인터페이스 분리 원칙 DIP : 의존성 역전 원칙 - Single Responsibility 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 기능만 가진다. 장점 : 가독성 향상과 유지보수가 용이해지며, 변경에 의한 연쇄작용에서 자유롭다.(SRP책임이 분명해짐) - Open/Closed Principle 개방-폐쇄 원칙 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야한다. 기존 구성요소에는 수정이 일어나지 않고, 기존 구성 요소를 쉽게 확장해서 재사용한다. 객체지향의 추상화와 다형성을 활용한다. ex) 소프트웨..
-
♻️[클린코드] #1 깨끗한 코드와 의미 있는 이름Study/클린코드 2022. 5. 8. 01:57
♻️ 나쁜 코드 - 나쁜코드가 무엇일까? 1. 성능이 나쁜 코드 : 불필요한 연산이 존재한다. 2. 의미가 모호한 코드 : 이해하기 어려우며, 네이밍과 그 내용이 일치하지 않는다. 3. 중복된 코드 : 비슷한 내용인데 중복된 코드들은 버그를 낳으며 불필요하게 공간을 차지한다. - 나쁜 코드가 나쁜 이유 깨진 유리창 법칙 : 나쁜 코드는 계속 나쁜 코드가 만들어지도록 한다. 생산성 저하 : 나쁜코드가 쌓일수록 기술 부채가 쌓인다. 팀 생산성을 저하시킨다. 기술부채를 만들어 기존 코드 수정을 더 어렵게 한다. * 기술부채 : 새로운 시스템을 만들어야 한다 : 현시스템을 유지보수하며 대체할 새로운 시스템 개발은 현실적으로 매우 어렵다. - 나쁜 코드를 짜는 이유 일정이 촉박해서 : 일정 안에 새로운 기능을 완..
-
🎮 [JAVA 자바] #10 | 업캐스팅, 다운캐스팅, 추상메소드, 추상클래스, 인터페이스CS/Java 2022. 4. 19. 08:09
🎮 업캐스팅과 다운캐스팅 - 업캐스팅(upcasting) 서브 클래스 객체에 대한 레퍼런스를 슈퍼 클래스로 타입 변환. 서브클래스의 객체는 슈퍼클래스의 객체로 취급 가능. 슈퍼클래스의 멤버를 모두 가지고 있음 슈퍼 클래스 멤버만 접근 가능해진다. (원래 클래스만 가지고 있던 멤버 접근 불가능) class Person {...} class Student extends Person {...} Person p = new Student(); // 업캐스팅, 자동타입변환 - 다운캐스팅(downcasting) 슈퍼 클래스 객체를 서브 클래스 타입으로 되돌림 변환. 다시 기존의 클래스 멤버 접근 가능 강제 형변환 필요 (타입 변환 표시 필요) Student s = (Student)p; // 다운캐스팅, (Stud..
-
💻 [OS 오퍼레이팅시스템] #8 | Process Scheduling 2 | scheduling기준, Virtual Round Robin, 스케쥴링 알고리즘 비교, 다단계 피드백 큐 스케쥴링, MFQSCS/OS 2022. 4. 17. 23:39
💻 용어 정리 - Burst (time) CPU Burst : CPU가 실행한 소요시간 I/O Burst : CPU가 I/O기다리는 시간 cycle : CPU Burst와 I/O Burst 사이클을 반복하다가 언젠가 종료 - Bound I/O Bound : CPU burst가 더 작은 프로세스 또는 프로그램 CPU Bound (CPU intensive) : CPU burst가 더 큰 프로세스 또는 프로그램으로, CPU process, CPU task로도 불림 2개 믹스된 프로세스도 있다. 💻 스케쥴링 기준(Criteria) - 최적화(Optimization) 기준 CPU utilization : 얼마나 CPU를 활용해서 idle한 상태를 줄이는가 Throughput : 시간당 프로세스 처리량으로, 클수롤..