본문 바로가기

VEDA 복습

VEDA 27일차 - 임베디드 리눅스

반응형

 

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 (표준 입력 스트림, 표준 출력 스트림, 표준 에러 스트림)

 

반응형