#os
노트 34개
Computer Science
컴퓨터 구조, 운영체제(프로세스·메모리·파일), 네트워크(TCP·HTTP), 데이터베이스, C와 기초 자료구조, 정보처리기사 개념까지 개발의 바탕이 되는 CS 지식 모음.
Computer Science › C Programming
C 입력과 파일 입출력scanf로 표준 입력을 받고, fopen·fprintf·fread·fclose로 파일을 읽고 쓰는 C 표준 라이브러리(stdio)의 기본 입출력. 매직 넘버로 JPEG를 판별하는 바이너리 읽기 예제를 담는다.
Computer Science › C Programming
C의 역사와 표준C는 유닉스를 이식하기 위해 태어났고, K&R C에서 C89/C90, C99, C11, C17, C23으로 표준화되었다. 원형 없는 함수 호출과 암묵적 int 같은 옛 규칙이 memset(int c) 같은 흔적으로 남은 이유, 유닉스·BSD·리눅스와 POSIX의 관계를 정리한다.
Computer Science › Computer Architecture
캐시 메모리와 MMU캐시의 주소 매핑(연관·직접·집합 연관)과 쓰기 정책, 그리고 하드웨어 관점에서 MMU가 맡는 재배치·공유·보호와 세그먼트 보호 필드.
Computer Science › Network
리눅스 네트워크 네임스페이스와 ip 명령리눅스에서 네트워크 설정을 다루는 ip 명령의 구조와 출력 읽는 법(인터페이스 플래그·MTU·scope·라우팅 테이블), 한 호스트 안에 격리된 네트워크 공간을 만드는 네트워크 네임스페이스와 veth 쌍, 이것이 컨테이너 네트워크의 바탕이 되는 원리를 정리한다.
Computer Science
운영체제하드웨어와 프로그램 사이에서 자원을 관리하고 실행 환경을 제공하는 시스템 소프트웨어에 대한 노트 모음. 프로세스·메모리·파일의 이론과 함께 UNIX 시스템 프로그래밍(파일 디스크립터, 시그널, 셸, pthread, 타이머)과 리눅스 운영(systemd, 접근 제어, 배포판, 가상화)을 다룬다.
Computer Science › Operating System
가상 메모리요구 페이징과 페이지 폴트 처리, OPT·FIFO·LRU·LFU·Clock 페이지 교체 알고리즘, 다양한 캐싱 환경, 프레임 할당과 스래싱, Working Set·PFF, 페이지 크기.
Computer Science › Operating System
가상화와 하이퍼바이저하나의 물리 머신 위에 여러 운영체제를 돌리는 서버 가상화의 원리. 하이퍼바이저 Type 1·2 분류와 전가상화·반가상화·하드웨어 지원 가상화의 차이, 운영체제 수준 가상화(컨테이너), 샌드박스로서의 VM, 가상 네트워크 모드를 정리한다.
Computer Science › Operating System
교착 상태프로세스들이 서로의 자원을 기다리며 멈추는 교착 상태의 4가지 발생 조건, 자원 할당 그래프, 예방·회피(은행원 알고리즘)·탐지와 복구·무시.
Computer Science › Operating System
구조적 동시성동시 작업의 수명을 코드 블록에 묶어, 블록을 빠져나갈 때 그 안에서 띄운 작업이 모두 끝나 있게 하는 원칙. go 문·스레드 생성·콜백처럼 흐름을 갈라놓고 돌아오지 않는 기본 요소는 goto처럼 지역적 추론을 깨뜨린다. nursery·TaskGroup·coroutineScope가 이를 대체해 예외 전파, 자원 정리, 취소를 자동으로 보장한다.
Computer Science › Operating System
데몬과 systemd터미널과 분리되어 백그라운드에서 도는 데몬의 개념, SysV 방식의 이중 fork 데몬화가 필요했던 이유, 그 일을 대신 해 주는 systemd의 유닛·서비스·타이머, cron을 대체하는 systemd 타이머와 journalctl 로그를 정리한다.
Computer Science › Operating System
동시성·병렬·비동기·논블로킹과 동시성 모델동시성(논리적으로 함께 진행)과 병렬(물리적으로 동시에 실행), 동기·비동기(완료를 누가 확인하나)와 블로킹·논블로킹(제어권을 바로 돌려받나)을 구분하고, 스레드보다 가벼운 실행 단위(파이버·코루틴·그린 스레드·가상 스레드), async/await와 CPS, Reactor·Proactor, 공유 메모리 대신 메시지를 쓰는 CSP·액터, Go·Tokio·BEAM 런타임의 스케줄링, GIL과 그 대안을 한 지도로 정리한다.
Computer Science › Operating System
디스크 관리와 스케줄링디스크 구조(섹터·논리 블록), 포맷팅·파티셔닝과 부팅 과정, 접근 시간 구성, FCFS·SSTF·SCAN·C-SCAN·N-SCAN·LOOK 디스크 스케줄링, 스왑 공간과 RAID.
Computer Science › Operating System
리눅스 배포판과 패키지 관리리눅스 커널과 배포판의 관계, Debian·RHEL·Arch 계열의 차이와 패키지 관리자(apt·dnf·pacman), CentOS가 CentOS Stream으로 바뀐 과정과 Rocky Linux·AlmaLinux 같은 대안, 배포판·커널 버전 확인 방법을 정리한다.
Computer Science › Operating System
리눅스 서버 점검: 부하·메모리·자원 한도서버에 들어가면 보는 순서(부하 평균, 커널 로그, 디스크, TCP 상태, I/O), free의 available과 페이지 캐시·버퍼 캐시, 메모리가 바닥날 때 캐시 회수에서 OOM Killer까지 벌어지는 일, open files·max user processes 같은 ulimit 한도와 systemd 설정, 운영 보안 습관을 정리했다.
Computer Science › Operating System
리눅스 접근 제어: DAC, MAC, sudo리눅스가 누가 무엇을 할 수 있는지 정하는 방식. 소유자가 권한을 정하는 DAC(rwx·setuid), 커널 정책이 강제하는 MAC(AppArmor·SELinux), 관리자 권한을 빌려 쓰는 sudo와 sudoers 문법, 비밀번호 정책을 맡는 PAM을 정리한다.
Computer Science › Operating System
멀티스레딩 디자인 패턴과 논블로킹 알고리즘생산자-소비자, 스레드 풀, 퓨처·프로미스, 모니터 객체, 배리어, 읽기-쓰기 락 여섯 가지 멀티스레딩 패턴이 각각 어떤 동기화 문제를 푸는지 정리한다. 스레드 안전의 뜻과 락 없이 얻는 방법, 언어별 기본 자료구조의 스레드 안전성과 동시성 해시 테이블 설계(락 스트라이핑, 버킷 단위 CAS), CPU·I/O 바운드에 따른 스레드 풀 크기, 포크-조인과 작업 훔치기도 다룬다. 락을 쓰는 블로킹 알고리즘과 CAS로 짜는 논블로킹 알고리즘의 차이, 진행 보장 단계(락 프리, 기아 없음, 대기 없음)도 함께 다룬다.
Computer Science › Operating System
메모리 관리논리·물리 주소와 주소 바인딩, MMU, 동적 로딩·링킹과 스와핑, 연속 할당과 단편화, 페이징(TLB·다단계 페이지 테이블·쓰기 시 복사)과 세그멘테이션.
Computer Science › Operating System
셸이 명령을 실행하는 방식셸이 한 줄의 명령을 토큰화·파싱·확장한 뒤 fork·exec·wait와 pipe·dup2로 실행하는 과정. 파이프라인이 동시에 실행되는 이유, 쓰지 않는 파이프 끝을 닫아야 하는 이유, heredoc·서브셸·종료 상태까지 정리한다.
Computer Science › Operating System
운영체제 개요운영체제가 무엇이고 왜 필요한지, 커널 영역과 이중 모드·시스템 호출, 단일형·마이크로·하이브리드 커널의 구조 차이, 어떤 기준으로 분류되는지 정리한 입문 노트.
Computer Science › Operating System
운영체제의 시간과 타이머운영체제가 다루는 세 가지 시간(벽시계·단조·프로세스 CPU 시간), 이를 재는 하드웨어(RTC·HPET·TSC), POSIX 시계 API, sleep 계열 함수, alarm과 인터벌 타이머를 정리한다. 경과 시간은 단조 시계로 재야 하는 이유가 핵심이다.
Computer Science › Operating System
자주 쓰는 리눅스 명령어 지도리눅스 명령어를 파일·보기·텍스트 처리·프로세스·시스템 정보·사용자·네트워크·패키지 범주로 묶은 지도. grep·cut·sed·awk·sort·uniq를 파이프로 이어 로그를 훑는 법과, CPU 사용률이 100%일 때 의심할 원인과 확인 순서를 함께 정리한다.
Computer Science › Operating System
컴퓨터 시스템 구조와 인터럽트모드 비트, 타이머, 장치 제어기, 인터럽트, 시스템 콜, 동기식·비동기식과 블로킹·논블로킹 입출력, DMA, 커널 입출력 서브시스템(드라이버 계층, 블록·문자·네트워크 장치, 버퍼링·캐싱·스풀링, 입출력 성능 원칙), 커널 주소 공간을 통해 운영체제가 하드웨어를 다루는 방식과, 시스템 콜·라이브러리 함수의 차이와 man 페이지 섹션을 정리.
Computer Science › Operating System
파일 시스템파일과 디렉터리, 트리 구조 디렉터리와 경로, 디렉터리 엔트리, 파티션, 리눅스 디렉터리 구조(FHS), open() 동작, 파일 보호와 마운트, 접근 방식 등 파일 시스템의 인터페이스.
Computer Science › Operating System
파일 시스템 구현블록과 연속·연결·인덱스 할당, inode의 직접·간접 블록과 경로 탐색, FAT, 빈 공간·디렉터리 관리, VFS/NFS, 버퍼 캐시와 페이지 캐시.
Computer Science › Operating System
프로세스 동기화공유 데이터에 동시에 접근할 때 생기는 경쟁 상태, 운영체제 안의 경쟁 상태, 임계 구역 문제와 해결 조건, 피터슨 알고리즘과 Test-and-Set, 뮤텍스 락과 세마포어(상호 배제·실행 순서 제어), 고전적인 동기화 문제, 모니터의 진입 큐와 조건 변수.
Computer Science › Operating System
프로세스 상태와 CPU 스케줄링프로세스 상태 전이, CPU burst와 성능 척도, 선점·비선점 스케줄링 알고리즘(FCFS·SJF·HRN·RR·MLFQ), 다중 프로세서·실시간·스레드 스케줄링, 문맥 교환 비용 정리.
Computer Science › Operating System
프로세스와 스레드프로세스의 문맥과 메모리 영역(코드·데이터·힙·스택), PCB, 문맥 교환, 스레드의 구조와 장점, 사용자 수준·커널 수준 스레드 모델(N:1·1:1·M:N), 멀티프로세스와 멀티스레드 비교, fork·exec·wait·exit, IPC 수단과 파이프·FIFO·공유 메모리·메시지 큐 사용법.
Computer Science › Operating System
Bash 스크립트 작성법Bash 스크립트를 쓸 때 필요한 문법을 한곳에 모았다. 변수와 매개변수 확장, 배열, [[ ]]·(( ))·case 조건문, 반복문, 함수와 $@, 종료 코드와 특수 변수, set -euo pipefail과 trap, 디버깅, 그리고 명령줄을 빠르게 쓰는 습관.
Computer Science › Operating System
POSIX 스레드와 동기화 APIC에서 스레드를 다루는 POSIX pthread API와 동기화 도구. 스레드 생성·join·detach, 뮤텍스와 조건 변수, POSIX 세마포어, 원자성을 하드웨어가 보장하는 방법, 커널 내부의 스핀락, Java 모니터와의 대응을 정리한다.
Computer Science › Operating System
UNIX 시그널커널이나 다른 프로세스가 프로세스에 보내는 비동기 알림인 시그널. 주요 시그널과 기본 동작, sigaction과 핸들러 작성 규칙, 보류·병합 특성, SIGCHLD와 좀비 프로세스, 시그널을 통신에 쓸 때의 한계를 정리한다.
Computer Science › Operating System
UNIX 파일 입출력과 파일 디스크립터프로세스가 파일·파이프·소켓을 정수 하나(파일 디스크립터)로 다루는 UNIX 입출력 모델. 커널의 세 테이블, open 플래그와 read 반환값 처리, dup2와 리다이렉션, stdio 버퍼링 모드와 페이지 캐시, I/O 멀티플렉싱, mmap과 그 한계를 정리한다.
Computer Science › Programming Languages
메모리 풀같은 크기의 객체를 자주 할당·해제할 때 큰 블록을 미리 잡아 두고 한 칸씩 나눠 주는 메모리 풀을 정리한다. 고정 크기 풀은 빈 칸 인덱스 스택 하나로 할당과 해제를 O(1)에 끝내고, 가변 풀은 고정 풀을 청크로 이어 붙인다. 클래스의 operator new/delete를 오버로딩하면 호출 코드를 바꾸지 않고 풀을 쓸 수 있다.
Computer Science › Programming Languages
프로그램이 실행되기까지: 컴파일, 바이트코드, 인터프리터, GC소스 코드가 CPU에서 돌기까지의 세 갈래(네이티브 컴파일, 바이트코드 + VM·JIT, 인터프리터)와, 운영체제가 실행 파일을 띄워 종료하기까지의 단계, 가비지 컬렉션이 관리하는 영역과 추적·참조 카운팅의 비교, 순환 참조와 retain cycle, GC의 장단점과 Java·Python·Go의 방식, 브라우저에서 네이티브 코드를 돌리는 WebAssembly를 정리한다.