pstree(ps)
프로그램 실행
1. 자식 프로세스 생성(fort)
2-1. 자식 프로세스와 부모 프로세스가 닮았으면 코드 공유 : ex) bash->bash ..
2-2. 자식 프로세스가 부모 프로세스와 닮지 않은 경우, 새로 코드를 로딩함
bash
1. command : ie, echo, ls, ...
2. keyword : if, case, ...
DOS, Windows, Linux 체제의 각 파일 시스템
1) DOS (Disk Operating System)
FAT12, FAT16
- FAT (File Allocation Table) 구조 사용
- FAT12: 12비트 파일 할당 테이블, 플로피디스크 등에서 사용
- FAT16: 16비트 구조로, 최대 파티션 크기 약 2GB
- 장점: 단순한 구조, 호환성 우수
- 단점: 디스크 공간 낭비, 파일 보안 기능 없음, 저용량만 지원
2) Windows
FAT32
- FAT16의 확장형으로 최대 2TB까지 지원 (파일당 최대 4GB)
- 플래시 메모리, USB 등에 사용
- 장점: OS 간 호환성 우수
- 단점: 대용량 파일 지원 불가, 보안 기능 부족
NTFS (New Technology File System)
- Windows NT 계열부터 기본 파일 시스템
- 파일 크기: 이론상 16EB 이상 지원
- 기능적 특징:
- 저널링 (파일 시스템 변경 기록 저장)
- 파일/디렉토리 별 접근 제어 목록(ACL)
- 압축, 암호화, 디스크 쿼터 지원
- 하드 링크, 심볼릭 링크, 트랜잭션 지원
- 단점: 리눅스에서 기본적으로 읽기 전용 접근 (쓰기 제한 존재 가능)
exFAT (Extended FAT)
- FAT32의 단점 개선 (4GB 제한 없음)
- 주로 USB/SD 카드 등 이동식 저장장치에 사용
- Windows/Mac/Linux 일부에서 호환 가능
3) Linux
ext2 (Second Extended File System)
- 초기 리눅스 기본 파일 시스템
- 저널링 기능 없음 → 속도는 빠르나 전원 장애에 취약
ext3
- ext2 기반 + 저널링 추가
- 빠른 복구 가능, 하위 호환성 유지
ext4
- ext3의 개선판
- 최대 파일 시스템 크기: 1EB (파일 크기 최대 16TB)
- 저널링 향상, 다이렉트 I/O 지원, 지연 할당 등 고급 기능
- 현재 대부분의 리눅스 배포판에서 기본 파일 시스템
XFS
- 고성능, 저널링 파일 시스템
- 대용량 파일 처리에 유리
- 병렬 처리 성능이 우수하여 서버에서 활용도 높음
Btrfs (B-tree FS)
- 차세대 파일 시스템 (ZFS와 유사)
- 스냅샷, 압축, RAID 지원, 셀프-힐링, 서브볼륨
- 관리 편의성 향상
사용자
root 사용자 : 최고 권한 사용자 -> root 계정이 털린다는 것은 시스템 전체가 털린 것
sudo : 일시적으로 root 권한 부여
runuser : 특정 유저 권한 부여
비밀번호는 /etc/passwd에 저장된다.
adduser : user 추가(root 권한에서 사용 가능)
su : switch user
deluser : user 삭제, 단 home에 빈 디렉토리가 남아 있으므로 옵션을 주어서 다 삭제하거나, rm으로 삭제
***chown : 파일의 소유권 정의 (chown [옵션] [소유자][:그룹] 파일명),
user group other : rwx - 421로 정의 ,ex) 664(user:rw_ group:rw_ other:r__), 8진수 표기를 권한을 부여하는데 사용할 수 있다.
chmod : 접근 권한 변경 ex) chmod o-x(other의 실행 권한 삭제)
***프로세스 관리***
CPU :
1. core : ALU + GPR
2. processor = core + MPU + CACHE
3. SoC : processor + devices
RAM
1. SRAM : small,but fast io
2. DRAM : large,but slow io
storage
1. NORF
2. NANDF
bus
1. internal bus : MCU <-> main memory
2. external bus : main memory <-> 외부 저장장치
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1 0 0 80 0 - 5809 ep_pol ? 00:00:04 systemd
1 S 0 2 0 0 80 0 - 0 kthrea ? 00:00:00 kthreadd
두 프로세스 모두 0번 프로세스를 부모로 가진다.
0번은 프로세스가 아니다!!
space
1. user space : user application이 동작하는 영역 - process
- user process :
0->1 = init (systemd), 부팅에 사용되는 프로그램
2. kernel space : OS 단에서 실행되는 프로그램이 동작하는 영역 ex) scheduler - thread
- kernel process(kthread)
0->2 = kthreadd
프로세스 생애 주기 : from p1 -> ready queue -> (running, suspended)
zombie state : 작업이 종료되었으나 계속 자원이 할당되어 있는 상태, 즉 스케줄러 입장에서 계속 살아있는 것처럼 보인다.
orphan process : 부모 프로세스가 종료되었으나 자식 프로세스가 살아 있는 상태 -> init가 자동 입양
kill > terminate
프로세스 스케줄링 : 여러 프로세스 중에 CPU가 처리할 프로세스를 결정하는 행위
1. cfs(completely fairness scheduling)
모든 태스크에게 CPU 시간을 공정하게 분배
우선순위 기반이 아니라, **“얼마나 오랫동안 CPU를 사용했는가”**를 기준으로 스케줄링
NI 값을 음수로 주기 위해서는 SU 권한이 필요하다. 단 NI >0에 대해서는 누구나 가능하다.
80 + NI(-20 ~ 19) - cfs(60 ~ 99)
2. rt(real time)
NI 값이 없는 프로세스, 나름대로의 priority 값을 가진다.(1(59) ~ 99(-40), 숫자가 높을 수록 우선순위가 높다.)
Super User 권한으로 사용 가능한 것들만 올 수 있다.
3. deadline
4. ....
공평성, 우선순위, 효율성, 응답 시간을 고려해서 스케줄링 알고리즘 선정
context switching : 작업 중 현재 CPU 상태를 저장하고, 다른 일을 수행하다가 다시 돌아오는 방식
PCB : 레지스터 값, 프로세스 상태 정보, 메모리 상태 정보 등의 문맥 정보를 저장하는 블럭
1. yield() - schedule()(linux), vTaskYield(RTOS) : context switching을 발생시킴, 자발적
2. interrupt() - tick()( linux ) : context switching을 발생시킴, 강제적, 인터럽트
Thread
scheduling entity
process - linux
task - RTOS
instance - Windows
thread : process와는 구분되는 개념
프로세스와 다르게 같은 메모리 공간을 공유한다. -> 즉 프로세스 간 통신에 별도의 통신 방법이 필요했던 것과 다르게 Thread 간에는 별도의 통신 없이 참조만 하면된다.
파일 입출력
printf == fprintf <- 일종의 파일 입출력이 설정되어 있다.
1. 고수준 입출력 : FILE 포인터 사용, fopen, fwrite, fread, ...
2. 저수준 입출력 : 파일 디스크립션 사용, open, write, read ...
fd = file descriptor
fdt = file descriptor table
0, 1, 2 => reserved (표준 입력 스트림, 표준 출력 스트림, 표준 에러 스트림)
'VEDA 복습' 카테고리의 다른 글
VEDA 29일-30일차 - 임베디드 리눅스 프로그래밍 (0) | 2025.04.25 |
---|---|
VEDA 28일차 - 임베디드 리눅스 (1) | 2025.04.23 |
VEDA 26일차 - 임베디드 리눅스 프로그래밍 (0) | 2025.04.21 |
VEDA 25일차 - 임베디드 시스템 (1) | 2025.04.18 |
VEDA 24일차 - 임베디드 시스템 이해 (0) | 2025.04.17 |