CS
28 posts
[CS] 소프트웨어엔지니어링 - Dev Ops

Dev Ops Development(개발) + Operations(운영) → 개발과 운영의 경계를 허물고 하나의 팀으로서 소통, 협업을 강조하는 개발 방법론 소프트웨어 개발과 운영을 통합하여 한 팀으로 작업 반복 작업 자동화를 통해 개발 및 배포 과정을 빠르고 정확하게 수행 코드 변경사항이 지속적으로 통합, 자동적으로 배포(CI/CD) 운영 중인 소프트웨어 모니터링을 통해 사용자 피드백 수집 인프라 및 애플리케이션을 빠르게 확장 및 관리 장점 CI/CD → 빠른 소프트웨어 제공 버그 조기 발견 가능 → 높은 품질 인프라 비용 절감 협력 및 의사소통 강조 → 효율적인 협업 사용자 피드백 반영 → 신속한 문제 해결 단점 조직 내 문화적인 변화 필요 데브옵스 환경 구축 및 유지 복잡성 자동화 프로세스를 위한 초기 투자 비용 발생

October 31, 2023
CS
[CS] 소프트웨어엔지니어링 - 함수형 프로그래밍

함수형 프로그래밍 (Functional Programming) → 수학적 함수의 개념에 기반을 둔 프로그래밍 패러다임 순수 함수 : 동일한 입력에 대해 항상 동일한 결과를 반환 불변성 : 데이터가 변경되지 않고, 변경이 필요한 경우에는 새로운 데이터 생성 고차 함수 : 함수를 변수에 할당하거나 인수로 전달할 수 있어 함수 추상화 및 재사용 용이 참조 투명성 : 함수 호출을 결과로 대체하여 코드 이해 및 최적화 재귀 : 반복 대신 재귀를 사용하여 코드를 간결하게 유지 명령형 프로그래밍 vs 함수형 프로그래밍 장점 간결하고 가독성 높은 코드 작성 가능 → 유지 보수 용이 순수 함수 & 불변 데이터 → 단위 테스트 및 TDD 용이 병렬 및 동시프로그래밍에 적합 메모리 사용 최적화 및 불필요한 복사 방지 단점 학습 시간 소요 재귀 사용 시 스택 오버플로우 발생 가능성 라이브러리 성능 면에서 제한 가능성 이해하기 어렵고 복잡한 높은 추상화 수준 references 👉 htt…

October 31, 2023
CS
[CS] 소프트웨어엔지니어링 - 애자일 방법론

애자일 방법론 (Agile Methodology) → 작업 계획을 짧은 단위로 세우고 제품을 만들고 고쳐 나가는 사이클을 반복함으로써 고객의 요구 변화에 유연하고도 신속하게 대응하는 개발 방법론 진행하면서 프로그램을 시행해보고 고객으로부터 피드백 고객과 개발자의 지속적인 소통을 통하여 변화하는 요구사항을 신속하게 수용 팀원들과의 주기적인 회의 및 제품 시현을 통한 점검 종류 익스트림 프로그래밍(Extreme Programming, XP) : 좋은 실천 지침들을 적극적으로 적용 짝 프로그래밍(Pair Programming) : 두 사람이 짝이 되어 한 사람이 코딩, 다른 사람은 검사 수행 테스트 주도 개발(Test Driven Development, TDD) : 두 사람이 짝이 되어 한 사람이 코딩, 다른 사람은 검사 수행 스크럼(Scrum) : 규칙과 팀 역할을 정의하여 1~4주 단위의 ‘스프린트’로 작업 필요성 짧은 개발 주기로 인해 새로운 기능과 업데이트…

October 24, 2023
CS
[CS] 소프트웨어엔지니어링 - 객체 지향 프로그래밍

객체 지향 프로그래밍(Object Oriented Programming) → 컴퓨터 프로그램을 객체들의 모임으로 보는 프로그래밍 패러다임(현실 세계의 개체를 소프트웨어 개체로 모델링) - 복잡한 현실 세계의 개체나 개념을 단순화하여 중요한 특성에 초점을 맞추는 프로세스 - 데이터와 해당 데이터를 조작하는 함수를 하나의 객체로 묶어 외부로부터 접근을 제어하는 것 ⇒ 정보 은닉 & 보안 - 하위 클래스가 상위 클래스의 특성과 동작을 상속받는 개념 ⇒ 코드 일관성 및 유지보수 향상 - 같은 이름의 메서드나 연산자가 다양한 객체에 대해 다르게 작동할 수 있도록 하는 능력 ⇒ 인터페이스 통일성 유지 필요성 현실 세계의 복잡성을 모델링하는 데 도움 클래스와 상속을 통해 코드 재사용을 촉진 → 개발 시간 단축 및 일관성 유지 모듈화를 통해 독립적으로 개발 & 테스트 보안 강화 및 부작용 최소화 객체, 메서드, 속성 등의 의미 있는 용어를 사용하여 가독성 향상 설계 원리 (SOLID)…

October 24, 2023
CS
[CS] 소프트웨어엔지니어링 - Test Driven Development(TDD)

Test Driven Development(TDD) → 반복 테스트를 이용한 소프트웨어 방법론 코드 작성 전 작은 단위의 테스트 케이스 작성 작성한 테스트 케이스를 통과시키는 코드 작성 짧은 개발 주기 반복하는 개발 프로세스 단순한 설계 중요 개발 절차 - 실패하는 테스트 코드 작성 - 테스트 코드를 성공하기 위한 실제 코드 작성 - 리팩토링 수행 장점 코드 품질 향상 및 코드 정확성 보장 초기 오류 감소 및 디버깅 시간 단축 기능 단위 테스트로 빠른 피드백 가능 코드 사용법 문서화 안전한 리팩토링 제공 추가 기능 구현 용이 단점 초기에 테스트 작성으로 인해 많은 시간 소모 (생산성 저하) 특정 요구사항의 경우 테스트 케이스 작성 어려움

October 17, 2023
CS
[CS] 소프트웨어엔지니어링 - 클린코드 & 리팩토링 & 시큐어코딩

클린코드 & 리팩토링 & 시큐어코딩 클린코드 (Clean Code) → 이해하기 쉽고, 변경하기 쉬운 코드 사람이 읽고 이해하기 쉬워야 함 네이밍이 잘 되어야 함 중복이 없어야 함 의존성을 최대한 줄여야 함 클래스 혹은 메소드가 한가지 일만 처리해야 함 테스트 코드가 있어야 함 필요성 SW는 한 번 신규 개발되고 오랜 기간 유지보수됨 기존 코드에 추가 작업하는 시간이 압도적으로 많음 대부분의 시간을 기존 코드를 읽고, 이해하는 데 사용됨 ⇒ 클린코드는 코드리뷰, 디버깅 시간을 단축시킴 (효율 up) 리팩토링 (Refactoring) → 결과의 변경 없이 코드 구조 재조정 가독성 높이고 유지보수를 편하게 함 버그를 없애거나 기능을 추가하는 행위 아님 외부 동작을 바꾸지 않고 내부 논리/구조를 개선함 개선이 필요한 코드 이해하기 어려운 코드 수정하기 어려운 코드 확장하기 어려운 코드 필요성 소프트웨어의 유지보수를 하는 과정이 간단해짐 협업 시 코드를 공유하는 과정에서 어려…

October 17, 2023
CS
[CS] 운영체제 - 메모리

메모리 논리적 주소 & 물리적 주소 논리적 주소 (Logical Address) 프로세스가 실행 중에 참조하는 주소 (가상 주소) CPU 명령어에 의해 생성 프로세스가 자신만의 독립된 메모리 공간을 가지는 것처럼 동작하게 함 OS가 각 프로세스에 가상 주소 공간 할당 물리적 주소 (Physical Address) 실제 메모리 하드웨어의 주소 (메모리에서 데이터가 저장되고 읽혀지는 위치) 논리적 주소가 MMU에 의해 변환되어 생성 실제 데이터가 저장되는 메모리 위치 나타냄 하드웨어와 OS에 의해 직접 접근되고 관리됨 MMU (Memory Management Unit) → 컴퓨터 시스템의 메모리 관리를 담당하는 하드웨어 ⇒ 프로세서와 실제 메모리 사이에 위치하며, 논리 메모리 주소를 물리적 메모리 주소로 변환하는 역할 기능 주소 변환(Address Translation) 가상 메모리 주소를 물리적 메모리 주소로 변환 이를 통해 프로세스는 자신만의 독립된 주소 공간 가짐 메모리…

October 10, 2023
CS
[CS] 운영체제 - 파일 시스템

파일 시스템 (File System) → 운영 체제가 저장 장치에서 데이터를 저장, 조직, 검색하는 방법을 관리하는 시스템 소프트웨어 커널 영역에서 동작 파일 CRUD 기능을 원활히 수행하기 위한 목적 계층적 디렉터리 구조 특징 데이터를 파일과 디렉터리 형태로 조직하여 사용자가 쉽게 접근 및 관리 가능 각 파일과 디렉터리의 크기, 생성 및 수정 시간, 소유자 정보 등의 메타데이터 저장 및 관리 파일과 디렉터리에 대한 읽기, 쓰기, 실행 권한을 설정하여 사용자별 접근 제어 디스크 공간 효율적으로 사용하기 위해 파일 할당 & 해제 관리 데이터 손상 방지 및 손상된 데이터 복구 기능 제공 텍스트 파일, 바이너리 파일, 디렉터리 등 다양한 파일 형식 지원 기능 파일 및 디렉터리 생성 및 삭제 파일 읽기 및 쓰기 저장 공간 할당 및 해제 파일 이름 및 경로 관리 파일 접근 제어 설정 데이터 무결성 및 복구 작동 원리 파일 저장 사용자가 파일을 저장하면 파일 시스템은 파일의 데이터를…

October 10, 2023
CS
[CS] 운영체제 - 페이지 교체 알고리즘

페이지 교체 알고리즘 프로세스가 요구한 페이지가 현재 메모리에 없으면 페이지 부재 발생 페이지 부재가 발생 시 스왑 영역에서 페이지를 메모리로 가져옴 만약 메모리가 꽉 찼다면 메모리에 있는 페이지를 스왑 영역으로 보내야 함 → 스왑 영역으로 보낼 페이지를 결정하는 알고리즘 종류 FIFO (First-In-First-Out) 가장 간단한 페이지 교체 알고리즘으로, 가장 먼저 메모리에 들어온 페이지 교체 페이지 교체 순서는 페이지가 메모리에 도착한 순서대로 결정 교체되는 페이지가 최근에 사용된 페이지일지라도 교체될 수 있다는 단점 LRU (Least Recently Used) 가장 오랫동안 사용되지 않은 페이지를 교체 페이지가 사용될 때마다 해당 페이지의 사용 시간을 업데이트하고, 교체할 때 가장 오랫동안 사용되지 않은 페이지 선택 최적의 성능을 제공하지만 구현이 복잡하고 메모리 사용량이 크다는 단점 LFU (Least Frequently Used) 가장 적게 사용된 페이…

September 26, 2023
CS
[CS] 운영체제 - Paging & Segmentation

Paging & Segmentation 외부 단편화 : 물리적 메모리의 빈 공간으로 인해 발생하는 문제 내부 단편화 : 할당된 메모리의 내부 공간이 비효율적으로 사용되는 문제 Paging → 프로세스의 주소 공간을 고정된 사이즈의 페이지 단위로 나누어 물리적 메모리에 불연속적으로 할당하는 방식 물리적 메모리를 고정된 크기 블록인 으로 분할하고, 논리적 메모리를 동일한 크기의 로 분할 논리적 주소를 페이지 번호와 오프셋으로 나타냄 페이지와 프레임을 대응시키는 page mapping 과정 필요 페이지 테이블에 각 페이지 번호와 해당 페이지가 할당된 프레임의 시작 물리 주소 저장 구현이 간단하여 효율적인 메모리 사용 가능 연속적이지 않은 공간도 활용할 수 있기 때문에 외부 단편화 문제 해결 프로세스의 크기가 페이지 크기의 배수가 아닐 경우 마지막 페이지에 내부 단편화 발생 Segmentation → 프로세스를 서로 크기가 다른 논리적인 블록 단위인 세그먼트로 분할하…

September 26, 2023
CS
[CS] 운영체제 - Race Condition

Race Condition → 두 개 이상의 프로세스/ 스레드들이 하나의 리소스에 동시에 접근하기 위해 경쟁하는 상태 발생 경우 커널 코드 실행 중에 인터럽트가 발생할 경우 프로세스가 시스템 콜을 하여 커널모드로 진입해서 작업을 수행하는 도중에 문맥 교환이 발생할 경우 멀티 프로세서에서 공유 메모리 내의 커널 데이터에 접근할 경우 문제 Mutual exclusion (상호 배제) : 한 번에 하나의 프로세스나 스레드만 공유 리소스에 접근할 수 있도록 하는 것 Race condition을 막기 위해서는 두 개 이상의 프로세스가 공용 데이터에 동시에 접근을 하는 것을 막아야 함 Deadlock (교착 상태) : 두 개 이상의 프로세스나 스레드가 서로가 공유 리소스를 해제하기를 기다리면서 진행하지 못하는 상황 교착 상태는 시스템 전체의 리소스 이용 불가능을 초래할 수 있으며, 올바른 동기화 기술을 통해 관리하거나 피해야 함 Starvation (기아 상태) : 프로세스나 스레드가…

September 12, 2023
CS
[CS] 운영체제 - 세마포어 & 뮤텍스

세마포어 & 뮤텍스 세마포어 (Semaphore) 공유된 자원의 데이터를 여러 프로세스가 접근하는 것을 막는 것 연산 P(Produce): 세마포어 값을 감소시키는 연산. 만약 세마포어 값이 0보다 작으면 대기 V(Release): 세마포어 값을 증가시키는 연산. 다른 스레드가 대기 중이면 하나의 스레드를 깨움 일반적으로 양의 정수 값을 가지며, 이 값을 “카운터” 로 활용 일반적으로 비교적 긴 시간을 확보하는 리소스에 대해 이용 프로세스 간 통신(IPC)에 사용되거나 공유 자원에 대한 제한된 엑세스를 관리하는 데 유용 뮤텍스 (Mutex) 공유 리소스에 대한 동시 액세스를 허용하지 않는 동기화 도구 임계 영역을 가진 쓰레드들의 Running Time이 서로 겹치지 않게 각각 단독으로 실행하게 하는 기술 다중 프로세스들의 공유 리소스에 대한 접근을 조율하기 위해 locking과 unlocking 사용 뮤텍스를 확보하려는 스레드는 뮤텍스가 잠겨 있지 않을 때만 진행 가…

September 12, 2023
CS
[CS] 운영체제 - CPU 스케줄링

CPU 스케줄링 (CPU Scheduling) → 어떤 작업에 CPU를 배정할지 결정하는 것 ⇒ 다수의 프로세스가 효율적으로 실행되고, 자원을 효율적으로 활용할 수 있도록 종류 비선점 : 어떤 프로세스가 CPU를 점유하면 다른 프로세스가 이를 빼앗을 수 없는 방식 (짧은 작업에도 장기간 대기하는 경우 발생) 선입선출 스케줄링 (First-Come First-Served Scheduling) 먼저 도착한 프로세스 먼저 실행 실행 시간이 긴 프로세스가 먼저 도착하면 기다리는 시간이 길어질 수 있음 최단 작업 우선 스케줄링 (Shortest Job First Scheduling) 프로세스의 실행 시간을 미리 예측하여 실행 시간이 가장 짧은 프로세스 먼저 실행 최적의 성능을 제공 정확한 실행 시간 예측 필요 우선순위 스케줄링 (Priority Scheduling) CPU를 할당할 때 우선순위가 가장 높은 프로세스 선택 현재 실행 중인 프로세스 완료할 때까지 대기 최고 응답률 순서 스케줄…

September 05, 2023
CS
[CS] 운영체제 - Deadlock

Deadlock (교착 상태) → 두 개 이상의 프로세스나 스레드가 서로 상대방의 작업이 끝나기를 기다리며 무한히 대기하는 상황 발생 조건 상호 배제 (Mutual Exclusion) : 리소스는 한 번에 하나의 프로세스만 사용할 수 있어야 한다. (동시에 여러 프로세스가 리소스 공유 불가능) 점유 대기 (Hold and Wait) : 프로세스가 최소한 하나의 리소스를 보유하고 있으면서 다른 리소스를 얻기 위해 대기하고 있어야 한다. 비선점 (No Preemption) : 프로세스가 어떤 리소스를 이미 보유하고 있을 때, 해당 리소스를 다른 프로세스로부터 선점할 수 없어야 한다. 다른 프로세스는 해당 프로세스가 리소스를 자발적으로 반납할 때까지 대기해야 한다. 순환 대기 (Circular Wait) : 프로세스 간에 리소스 요청 순서가 사이클을 형성하도록 대기 관계가 형성되어야 한다. 한 프로세스가 다음 프로세스의 요청을 대기하고, 다음 프로세스는 그 다음 프로세스의 요청을…

September 05, 2023
CS
[CS] 운영체제 - IPC

IPC Inter Process Communication: 프로세스 간 통신을 위한 메커니즘 IPC 종류 Anonymous PIPE 하나의 프로세스는 데이터를 쓰기만, 다른 하나는 데이터를 읽기만 가능 한쪽 방향으로만 통신 가능 통신을 할 프로세스가 명확하게 알 수 있는 경우 사용 구현이 매우 간단하다는 장점 Named PIPE 부모 프로세스와 무관하게 전혀 다른 모든 프로세스들 사이에서 통신 가능 통신을 위해 이름이 있는 파일 사용 단방향 통신만 가능하지만 이름이 있는 파일 두 개를 사용해 해결 가능 Message Queue Named PIPE와 입출력 방식 동일 Named PIPE는 데이터의 흐름, 메시지 큐는 메모리 공간이라는 차이 메시지 큐에 쓸 데이터에 번호를 붙임으로써 여러 개의 프로세스가 동시에 데이터를 쉽게 다룸 Shared Memory 데이터 자체를 공유하도록 지원하는 설비 별다른 통신 없이 직접적으로 데이터에 접근하기 때문에 IPC 중 가장 속도 빠름 프로세스가…

August 29, 2023
CS
[CS] 운영체제 - PCB & Context Switching

PCB & Context Switching Process Control Block: 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영체제 커널의 자료구조 Context Switching: 현재 진행하고 있는 프로세스의 상태를 PCB에 저장하고 다음 진행할 프로세스의 정보를 PCB에서 읽어 적용하는 과정 PCB 운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳 프로세스의 상태 정보를 저장하는 구조체 프로세스의 상태 관리와 문맥 교환(Context Switching)을 위해 필요 프로세스가 생성될 때마다 고유의 PCB 생성 & 프로세스가 완료되면 PCB 제거 구성 Process ID : 프로세스의 고유 ID Process State : 프로세스의 상태 (Create, Ready, Running 등등) Program Counter : 프로세스를 위해 실행될 다음 명령어의 주소 Register : Accumulator, General R…

August 29, 2023
CS
[CS] 운영체제 - 인터럽트

인터럽트 Interrupt: CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치 또는 예외상황이 발생하여 처리가 필요한 경우 CPU에게 알려 처리할 수 있도록 하는 것. → CPU의 작업을 방해하는 신호 종류 하드웨어 인터럽트 : CPU가 아닌 다른 하드웨어 장치가 CPU에 어떤 사실을 알려주거나 CPU 서비스를 요청해야할 경우 발생 외부 인터럽트 : 외부 입출력 장치에 의해 발생 전원 이상 인터럽트 : 정전, 파워 이상 기계 착오 인터럽트 : CPU 기능 오류 외부 신호 인터럽트 : 타이머, 키보드, 외부 장치 인터럽트 입출력 인터럽트 : 입출력 데이터 오류, 입출력 장치의 데이터 전송 요구, 다음 동작 수행 요구 내부 인터럽트 : 잘못된 명령이나 잘못된 데이터 사용할 때 발생 (Trap) 프로그램 검사 입터럽트 : 0으로 나눈 경우, Overflow/Underflow, 기타 예외 상황 소프트웨어 인터럽트 : 프로그램 처리 중 명령 요…

August 22, 2023
CS
[CS] 운영체제 - 시스템 콜

시스템 콜 System Call : 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스 사용자 모드 : 하드웨어에 직접 접근 불가능 (시스템 보호 목적) 커널 모드 : 모든 시스템 메모리와 CPU에 접근 가능, 하드웨어에 직접 접근 가능 → 사용자 모드에서 커널 모드로 전환하기 위해 필요한 인터페이스 ⇒ 시스템 콜 작동 사용자 프로세스가 시스템 콜 → 커널 모드 진입 커널: 내부적으로 시스템 콜 구분하기 위해 기능 별로 고유번호 할당하고 해당 번호의 제어 루틴 정의 커널: 요청 받은 시스템 콜에 대응하는 번호 확인하고 해당 서비스 루틴 호출 커널: 서비스 루틴 처리하고 사용자 모드로 전환 유형 프로세스 제어 프로세스 실행, 생성, 대기 등 fork() : child 프로세스 생성 exec() : 프로그램 실행 wait() : 대기 exit() : 현재 프로세스 종료 파일 …

August 22, 2023
CS
[CS] 운영체제 - 프로세스 & 스레드

프로세스 & 스레드 정의 Process = 독립적인 실행 단위(실행 중에 있는 프로그램) Thread = 프로세스 내부에서 실행되는 작은 실행 단위 Process 구조 → code, data, stack, heap 독립적으로 할당 특징 독립성 : 각 프로세스는 고유한 메모리 공간과 리소스를 가지며, 다른 프로세스의 메모리나 리소스에 직접 접근할 수 없음 오류 격리 : 하나의 프로세스에서 오류나 충돌이 발생해도 다른 프로세스에 영향을 주지 않음 통신 : 파이프, 소켓, 메시지 큐와 같은 IPC를 사용하여 서로 통신함 생성 부하 : 리소스가 많이 들고 시간이 오래 걸림 Thread 구조 → stack만 할당받아 복사하고 code, data, heap은 프로세스내의 다른 스레드들과 공유 특징 독립성: 동일한 프로세스 내 스레드는 동일한 메모리 공간을 공유하므로 서로의 데이터에 직접 접근하고 수정할 수 있음 오류 격리: 스레드 내에서 오류가 발생하…

August 14, 2023
CS
[CS] 운영체제 - 프로세스 주소 공간

프로세스 주소 공간 구조 code (text) 영역 CPU가 해석 가능한 기계어 형태로 프로그램 코드가 저장되어 있는 공간 Read-Only (프로그램 수정 방지) 같은 프로그램으로 실행된 여러 프로세스는 동일한 코드 data 영역 코드가 실행되면서 사용하는 전역 변수, 정적 변수 데이터가 저장되어 있는 공간 프로그램 시작과 함께 할당, 프로그램 종료 시 소멸 stack 영역 지역 변수, 매개변수 등 호출한 함수가 종료되면 되돌아올 임시적인 자료를 저장하는 독립적인 공간 함수 호출과 함께 할당, 함수 호출 완료 시 소멸 메모리의 높은 주소 → 낮은 주소로 할당 함수가 stack 영역을 초과하면 stack overflow 에러 발생 heap 영역 생성자, 인스턴스와 같이 동적으로 할당되는 데이터들을 저장하는 공간 런타임에 따라 크기 결정 동적으로 할당 / 해제 메모리의 낮은 주소 → 높은 주소로 할당

August 14, 2023
CS
[CS] 운영체제 - 운영체제

운영체제 정의 컴퓨터 시스템의 하드웨어, 소프트웨어적인 자원들을 효율적으로 운영 및 관리함으로써 사용자가 컴퓨터를 편리하고, 효과적으로 사용할 수 있도록 하는 시스템 소프트웨어. 사용자 및 다른 소프트웨어와 하드웨어를 연결하는 중개자 역할을 해주는 프로그램. 목적 자원 관리 여러 응용 프로그램이 자원을 요청하면 적절한 순서로 배분하고 회수하여 자원을 효율적으로 관리한다. ⇒ 효율성 자원 보호 CPU, 메모리 등에 대한 사용자와 응용 프로그램의 직접 접근을 막는다. ⇒ 안정성 하드웨어 인터페이스 제공 다양한 제조사, 각기 다른 구성으로 되어있는 마우스, 키보드 등을 복잡한 과정없이 사용할 수 있도록 하드웨어 인터페이스를 제공한다. ⇒ 확장성 소프트웨어 인퍼테이스 제공 사용자가 운영체제를 편리하게 사용하기 위해 제공되는 것으로, 대부분의 작업을 마우스로 수행하거나 스마트폰의 터치스크린 등을 통해 제공되는 기능을 말한다. ⇒ 편리성 기능 프로세스 관리 OS에서 동시에 실행되…

August 08, 2023
CS
[CS] 컴퓨터구조 - ARM Processor

ARM Processor ARM = Advanced RISC Machine Processor = 명령어를 처리하고 반응하기 위한 논리회로 ARM 프로세서는 다양한 휴대기기, 임베디드 기기에서 가장 많이 사용되는 32bit 프로세서이다. ARM는 RISC 아키텍처를 사용한다. 장점 전력 소모량 적음 ⭐️ 확장성 → 마이크로 컨트롤러 ~ 다중 코어 프로세서 다양한 칩으로 사용 가능 스마트폰, 태블릿, 노트북, 웨어러블 기기, 임베디드 등 광범위한 사용 RISC RISC = Reduced Instruction Set Computer → 적은 수의 명령어를 수행하도록 설계된 프로세서 간단하고 고정된 길이의 명령어 세트 → 빠름 레지스터 활용 → 메모리 접근 최소화 및 성능 향상 파이프라이닝을 사용하여 병렬적으로 단계를 겹쳐서 처리 → 처리량 향상 단일 사이클 실행 → 효율성 향상 references 👉 https://code-lab1.tistory.com/174

August 08, 2023
CS
[CS] 컴퓨터구조 - 고정 소수점 & 부동 소수점

고정 소수점 & 부동 소수점 컴퓨터에서 실수를 표현하는 방법 → 고정 소수점 / 부동 소수점 고정 소수점 소수부의 자릿수를 미리 정해 고정된 자릿수의 소수를 표현 부호비트(1비트) - 실수가 음수면 부호비트에 1, 양수면 0 넣음 정수부(15비트) 소수부(16비트) 정수부와 소수부의 경계를 소수점의 위치로 생각하고 2진수로 변환된 수 넣음 정수부와 소수부의 자릿수가 크지 않으므로 표현할 수 있는 범위가 적음 부동 소수점 가수부와 지수부로 나누어 표현 부호비트(1비트) - 실수가 음수면 부호비트에 1, 양수면 0 넣음 지수부(8비트) - 정규화 과정에서 얻어낸 지수에 bias를 더한 값 가수부(23비트) - 소수 부분의 값 매우 큰 실수까지 표현 가능 대부분의 시스템에서 사용 중인 방식 오차 발생 가능성 references 👉 https://gguguk.github.io/posts/fixed_point_and_floating_point/

August 01, 2023
CS
[CS] 컴퓨터구조 - 패리티 비트 & 해밍 코드

패리티 비트 & 해밍 코드 패리티 비트 (Parity Bit) 정보 전달 과정에서 오류가 생겼는지 검사하기 위해 추가하는 비트 → 오류 검출 1바이트(8비트) 구조에서 패리티 비트는 7비트 크기의 ASCII 코드를 제외한 나머지 1비트이다. 짝수 패리티 → 데이터의 모든 1의 개수를 짝수로 맞춘다 홀수 패리티 → 데이터의 모든 1의 개수를 홀수로 맞춘다 특징 2개의 bit 데이터가 손실되면 알아차릴 수 없다. 오류 검출만 할 뿐 수정하지는 않는다. 해밍 코드 (Hamming Code) 데이터 전송 시, 1비트의 오류를 정정할 수 있는 자기 오류정정 코드 → 오류 정정 패리티 비트를 보고, 1비트에 대한 오류를 정정할 곳을 찾아 수정할 수 있다. 생성 규칙 d: 데이터 비트 수 p: 패리티 비트 수 2^p ≥ d + p + 1 를 만족하는 p의 최소 값 짝수 패리티의 해밍 코드가 0011011일때, 오류 수정 d: 4, p: 3 2의 n승 번째 자리인 1, 2, 4번째 자…

August 01, 2023
CS
[CS] 컴퓨터구조 - Cache Memory

Cache Memory 캐시 메모리 정의 → 컴퓨터 시스템의 성능을 향상시키기 위해 별도로 탑재된 캐시 전용 메모리. 시간을 절약하기 위해 데이터를 임시로 저장하는 고속 기억 장치이다. 컴퓨터 메모리에 한계를 극복하기 위해 캐시가 등장하였다. 캐시 메모리는 데이터에 접근하는 속도를 높여 CPU를 효율적으로 사용할 수 있다. 캐시 메모리 구조 캐시의 용량과 성능이 증가하면서 ‘캐시의 캐시’로 사용되는 메모리가 추가 되었고, 이것을 순서대로 L1, L2, L3라고 한다. L1 가장 고성능, 고가의 작은 회로 사용 CPU에 직접 데이터를 공급하기에 빠른 접근 지연 시간이 중요 L1 캐시에서 데이터를 먼저 찾은 후에 L2 캐시로 이동 L2 L1 캐시에서 데이터를 가져가기 위한 캐시로 사용 L1 캐시보다 용량이 크지만 느림 L3 CPU가 아닌 메인보드에 내장되는 경우 많음 L3 캐시도 L2 캐시와 동일한 역할 L2 캐시로 충분하면 사용되지 않음 캐시 메모리 작동 원리 → 캐시의…

July 25, 2023
CS
[CS] 컴퓨터구조 - CPU 작동 원리

CPU 작동 원리 CPU 구성 연산장치(ALU) 산술 연산 & 논리 연산 수행하는 장치 제어장치(Control Unit) 명령어를 순서대로 실행할 수 있도록 제어하는 장치 레지스터(Register) 명령어 주소, 코드, 연산에 필요한 데이터, 연산 결과 등을 임시로 저장하는 고속 기억장치 동작 과정 주기억장치가 입력장치에서 입력받은 데이터나, 보조기억장치에 저장된 프로그램을 읽어온다. CPU가 프로그램을 실행하기 위해 주기억장치에 저장된 프로그램 명령어와 데이터를 읽어와 처리하고, 처리 결과를 다시 주기억장치에 저장한다. 주기억장치가 처리 결과를 보조기억장치에 저장하거나 출력장치로 보낸다. 제어 장치가 위 1 ~ 3 과정에서 명령어가 순서대로 실행되도록 각 장치를 제어한다. 명령어 세트 → CPU가 실행할 명령어의 집합 연산 코드 (OpCode) : 실행할 연산 피연산자 (Operand) : 필요한 데이터 / 저장 위치 references 👉 https://velog.io…

July 25, 2023
CS
[CS] 컴퓨터구조 - 컴퓨터 구조 기초

컴퓨터 구조 기초 폰 노이만 구조 정의 오늘날의 컴퓨터는 대부분 를 따른다. 폰 노이만 구조는 크게 CPU - Memory - Program로 구성된다. CPU와 메모리를 분히라여 명령어를 따로 저장하는 프로그램 내장 방식이다. 정의 명령어 가져오기 (IF, Instruction Fetch) : 기억장치로부터 명령어를 가져온다. 명령어 해석 (ID, Instruction Decode) : 앞서 가져온 명령어가 어떤 명령어인지 해석을 진행한다. 피연산자 인출(OF,Operands Fetch) : 명령의 실행에 필요한 정보를 기억장치에 접근해 가져온다. 명령어 실행 (EX, Instruction Execution) : 앞서 가져온 연산자와 데이터를 가지고 연산을 수행하고 저장한다. 인터럽트 체크 👉🏻 작업을 수행하던 중 인터럽트가 발생했을 때의 처리과정 컴퓨터는 수행하던 일을 중지하고 현재 상태 (CPU 내부의 레지스터 값 등)를 보관한다. 발생한 인터럽트를 처리하기 위해 인터럽…

July 18, 2023
CS
[CS] 컴퓨터구조 - 컴퓨터의 구성

컴퓨터의 구성 : 기계적 장치 중앙처리장치(CPU) : 컴퓨터 시스템 전체를 제어하는 장치로서, 입력장치에서 데이터를 입력 받아 처리한 후 출력장치와 기억장치로 데이터를 전달 : 산술 연산(사칙연산)과 논리연산(참과 거짓 판단)을 수행하는 장치 : CPU 내부에서 일어나는 모든 작업 통제 및 관리 : 연산 중간 값, 명령어 등 일시적으로 저장하는 임시 기억 장치 기억장치(Memory) : 컴퓨터 시스템에서 수행되는 프로그램과 수행에 필요한 데이터를 기억하는 장치 RAM : 반영구적으로 데이터를 저장하고 보존할 수 있는 장치 하드 디스크, 플로피 디스크, CD-ROM, DVD 입출력장치(I/O) : 컴퓨터에서 처리할 데이터와 정보를 외부에서 입력해주는 역할 마우스, 키보드, 마이크 : 컴퓨터 내부에서 처리된 결과를 사용자에게 전달해주는 역할 프린트, 스피커, 모니터 : 하드웨어의 동작을 제시하고 지시하는 프로그램 시스템 소프트웨어 : 사용자가 컴퓨터를 효율적으로 사용하기…

July 18, 2023
CS