본문 바로가기

Computer Science16

[Memory Views and Copies in Numpy] Numpy 기본기. 개요 어떤 값을 의도적으로 덮어쓰고 싶을 때는 상관이 없지만, 덮어쓰고 싶지 않을 때 덮어쓰는 실수를 할 수도 있다. == view라는 개념을 잘 이해하지 못하면 우리가 가지고 있는 값을 덮어쓰는 실수를 저지를 수 있다. => view의 개념을 잘 이해함으로써 불필요한 copy를 피할 수 있고, 메모리 자원을 아끼는 데에 큰 도움이 된다. import numpy as np ary = np.array([[1,2,3], [4,5,6]]) first_row = ary[0] first_row += 1 print(first_row) print(ary[0]) 출력값을 보면, 분명 first_row에 ary[0]를 복사에서 더해줬는데, ary[0]에도 똑같이 연산이 수행되었음을 알 수 있다. ary[0]를 first.. 2024. 4. 16.
[EOF, End Of File] 파일 종료 EOF는 말 그대로, 파일의 끝(End of file)을 나타낸다. 파일에 더이상 읽어들일 데이터가 없다는 의미이며, 파일 뿐만 아니라, 입력의 끝을 알리는 신호로 사용된다. EOF의 입력 방법은 윈도우 : Crtl + Z Mac / Unix / Linux... : Crtl + D 이다. 예시 소스코드의 동작을 살펴보자. #include int main() { int a, b; while (true) { std::cin >> a >> b; if (std::cin.eof()) break; else std::cout 2024. 2. 16.
[에라토스테네스의 체] 소수를 구하는 알고리즘 소수란, " 1과 자신만을 약수로 가지는 수" 를 의미한다. 죠죠의 엔리코 푸치 신부는 마음의 평정을 유지하기 위해 소수를 셌다. 우리에게 평안을 가져다주는 소수, 어떻게 구할 것인가? 이번 글의 주제인 "에라토스테네스의 체" 라는 고대 그리스 수학자의 알고리즘에 대해 알아보기 전에, 간단한 알고리즘부터 살펴보자. # 1 범위 내의 모든 정수들 가지고 그보다 작은 수들로 나눠본다. 누구나 상상할 수 있고, 가장 간단한 방법. 범위 내의 모든 수를 가지고 소수인지를 판별하는 방법이다. 소스코드로 나타내면 이러하다. template bool Check(T input) { for (int i = 2; i 2024. 2. 11.
Operating System - Ch16. Security 본 글은 Operating System Concepts 10판을 기준으로 작성되었습니다...! 기본 용어 - Vulnerability: 취약점. CIA Triad가 깨지는 상황 - Threat: 위협, 취약점의 노출 가능성 - Attack: 위협의 실제 수행 - Adversary: Attack의 주체 - Countermeasure: 공격에 대한 반격 수단 Security requirement triad (CIA Triad) - Confidentiality: 기밀성, 데이터 내용을 남들이 알 수 없게 만들어야 한다. - Integrity: 무결성, 데이터의 위조나 변조가 될 수 없도록 한다. - Availability: 가용성, 어떤 상황에서든 시스템과 데이터를 사용할 수 있어야 한다. 이 세 가지 요건을.. 2022. 6. 20.
Operating System - Ch14-15: File system ㅇ본 글은 Operating System Concepts 10판을 기준으로 작성되었습니다...! 이번 챕터에서는 File system에 대해 알아보자. File System Implementation 파일 시스템의 구현은 크게 두 가지로 나뉜다. - In-memory structure: 운영체제가 시작되서 해당 프로세스가 파일을 접근할 때 필요한 구조. - On-disk structure: 전원이 꺼져도 Secondary storage가 데이터를 저장하기 위해 필요한 구조. In-memory structure 특정 프로세스가 파일에 접근하기 위해 open을 수행하면 file descriptor가 반환이 된다. 이것을 가지고 read/write을 하게 된다. open할 때 경로가 포함되어 있는 파일이름을 .. 2022. 6. 19.
Operating System - Ch13: File system interface ㅇ본 글은 Operating System Concepts 10판을 기준으로 작성되었습니다...! 이번 챕터에서는 File system interface에 대해 알아보자. File: 관련된 정보들을 집합으로 모아둔 것 또는 secondary storage에 저장하고 사용자에게 보여지는 하나의 단위. - File system은 이 File들을 체계적으로 관리하기 위한 시스템이다. - Windows 는 NTFS라는 File system을 사용한다. 그 전에는 FAT이라는 시스템을 사용했다. - Linux / Unix 계열은 ext라는 시스템을 사용한다. - Apple은 AFS(Apple File System)라는 시스템을 사용한다. - USB는 VFAT(Virtual FAT)을 사용한다. - FAT과 NTFS.. 2022. 6. 18.
Operating System - Ch12: I/O systems ㅇ본 글은 Operating System Concepts 10판을 기준으로 작성되었습니다...! 이번 챕터에서는 I/O systems에 대해 알아보자. I/O 연산은 CPU의 I/O 명령에 의해 수행된다. CPU가 I/O 장치에게 명령을 내리는 방법에 따라 Direct I/O와 Memory-mapped I/O로 나뉜다. 하드웨어적인 관점으로 볼 때는 I/O device가 I/O 명령을 수행하는 방식에 따라 Programmed I/O, Interrupt, DMA(Direct Memory Access) 세 가지 방식이 있다. - Programmed I/O는 I/O 장치에서 처리한 결과를 CPU register에 직접 전달하는 방식이다. 이 때는 I/O 연산의 결과값이 작은 경우.(키보드나 마우스) - 그 결.. 2022. 6. 18.
Operating System - Ch11. Mass storage structure 본 글은 Operating System Concepts 10판을 기준으로 작성되었습니다...! Mass storage는 다음과 같은 것들이 있다. - HDD (Hard Disk Drive) - SSD (Solid State Disk) - RAM disk - Magnetic tape 이러한 저장장치를 연결하는 방법은 두 가지가 있다. Host attached: I/O 포트를 통해 붙인다. 컴퓨터를 조립할 때 SATA 케이블이나 M.2 슬롯에 넣는 물리적인 연결. - IDE: 우리가 PC에서 사용하는 인터페이스 - SCSI: 서버같이 신뢰성과 기능이 중요한 컴퓨터에 사용하는 인터페이스 Network attached: 네트워크를 통해 붙인다. - NAS(Network-Attached Storage): 4~5베.. 2022. 6. 18.
Operating System - Ch10. Virtual memory 본 글은 Operating System Concepts 10판을 기준으로 작성되었습니다...! 이번 챕터에서는 Virtual memory에 대해서 알아보자. Virtual memory의 기본 개념은 Secondary Storage와 Physical memory 간의 "Swap", 그리고 이론상 무한한 양의 메모리를 사용할 수 있도록 하는 것이다. 아출발 이 그림을 통해 알 수 있듯이, virtual memory를 잘 사용하면 physical memory의 크기보다 훨씬 큰 양의 메모리를 사용할 수 있다. 이것이 가능한 이유는 바로 디스크의 일부분을 메모리로 생각하고 사용하기 때문이다. Physical memory에 Free frame이 더이상 없어 새로운 프로세스가 왔을 때 곤란해진다. 이 때 disk를.. 2022. 6. 16.
Operating System - Ch09. Main memory 본 글은 Operating System Concepts 10판을 기준으로 작성되었습니다...! 메모리는 아주 비싼 자원이다... 그래서 아주 잘 사용해야하고, 아껴 쓰고, 효율적으로 사용해야한다. 그렇다면 메모리 관리는 어떻게 해야할까? 이에 대해서 Ch09에서 알아보자. 메모리 관리에 있어서 중요한 이슈들 옛날 배치 시스템에서는 별 중요한 요소는 아니었다만... 멀티프로그래밍 환경이 찾아오면서 메모리 관리가 매우 중요해짐. - 여러 프로세스에 대한 지원 - 실제 Physical memory보다 더 큰 용량을 가지는 프로세스도 지원할 수 있어야 한다. - 메모리 자원 보호 - 메모리 자원 공유 - 성능 Virtual Memory (VM) Virtual memory는 메모리를 만들어서 physical me.. 2022. 6. 16.