목록CS 기초 (16)
교대최소제곱법
파일과 디렉토리 파일 : 논리적 단위 디렉토리 : 트리 구조 디렉토리 디렉토리 엔트리 : 특별한 파일로 간주 파일에 데이터가 담겨져 있다면, 디렉토리에는 정보가 담기는 거임 파일 이름 + 파일이 보조기억장치에 저장된 위치 파일 할당 방법 연속적 할당 → 외부 단편화 문제 발생 불연속적 할당 연결 할당 : 다음 블록 주소를 저장해서 연결 리스트로 관리 but 순차적으로 접근해야 원하는 부분에 접근할 수 있어 느리다 + 오류 발생시 끝 색인 할당 : 색인 번호를 관리하는 블록을 만든다 파일 시스템 포매팅 : 파일 시스템을 결정함 FAT 파일 시스템 : 블록 주소를 테이블(FAT)로 관리 루트 디렉토리 → 하위 디렉토리 → 첫 번째 블록 주소 발견 → FAT에서 다음 주소 발견 → … 유닉스 파일 시스템 : ..
메모리 할당 스와핑 : 안 쓰는 메모리를 보조기억장치로 보내는 방법 → 요구하는 메모리가 실제 메모리보다 크더라도 실행 가능 but 애초에 덩어리가 커버리면 실행 불가함 메모리 할당 알고리즘 최초 적합 / 최적 적합 / 최악 적합 : 다 비효율적임 → 외부 단편화 때문에 *외부 단편화 : 메모리 사이사이 공간이 발생, 메모리 낭비 외부 단편화 해결방법 메모리 압축 : 잘 안씀 페이징(goat) 페이징 모든 프로세스를 페이지라는 일정한 크기로 짜르고 메모리를 프레임으로 일정하게 짤라서 할당 페이지 단위로 스와핑도 가능(페이지 인, 페이지 아웃) = 프로세스에서 필요한 페이지만 담으면 되는거 아님? → 큰 프로세스도 실행 가능 또한 메모리에 불연속적으로 흩어 놓아 저장 가능 → 순차적 실행에 어려움이 있음 ..
CPU 스케쥴링 우선순위 : 입출력 작업이 많은 프로세스 > cpu 작업이 많은 프로세스 스케쥴링 큐 : 자원마다 큐를 생성 → 순서대로 나가는건 아님 대표적으로 준비 큐, 대기 큐 가 있다 선점형, 비선점형 스케쥴링 선점형 : 이미 사용하고 있어도 시간이 지나면 빼앗아서 사용 → 오버헤드가 많이 발생 *오버헤드 : 프로세스 처리를 위해 간접적으로 들어가는 시간 비선점형 : 앞 프로세스가 종료나 대기가 되어야 사용 스케쥴링 알고리즘 선입선처리 : 비선점 최단작업 : 선점 or 비선점 라운드 로빈 : 선입 선처리 + 타임 슬라이스 → 선점형 = 타임 슬라이스의 크기가 매우 중요하다 최소 잔여 시간 우선 : 최단 작업 + 라운드 로빈 우선 순위 : 기아 현상 → 우선 순위가 낮은 프로세스는 끝도 없이 밀림 ..
모든 프로그램은 실행을 위해 자원을 필요로 한다 커널 영역에 적재되는 프로그램 오류메세지에 대한 깊은 이해가 가능하다 커널 : 핵심적인 서비스를 담당하는 부분 유저 인터페이스는 커널이 아님 이중모드 : 플래그로 구별 가능, 사용자모드 vs 커널모드 시스템 호출 : 커널모드로 전환하기 위한 방법 → 소프트웨어 인터럽트 프로세스(실행 중인 프로그램) 관리 자원 접근 및 할당 : cpu 스케쥴링, 메모리(페이징, 스와핑), 입출력장치 파일 시스템 관리 프로세스 프로세스 제어 블록 PCB : 프로세스 관련 정보를 저장하는 자료 구조 → 커널 영역에 저장 프로세스 ID (PID) 레지스터 값 : 자신의 실행 차례가 오면 이전에 사용한 레지스터 값을 복원해 실행을 재개하기 위해 저장 프로세스 상태 cpu 스케쥴링 ..
입출력장치 보조기억장치도 입출력장치임! 장치 컨트롤러 → 입출력장치와 cpu를 연결해주는 장치 + 데이터 버퍼 장치 컨트롤러 : 버스에 연결됨 - 데이터, 상태, 제어 레지스터 장치 드라이버 : 장치 컨트롤러를 제어하는 프로그램 + 운영체제가 이해할 수 있도록 입출력 방식 프로그램 입출력 : 명령어로 장치 컨트롤러를 제어 → 레지스터에 직접 씀 메모리 맵 입출력 : 같은 메모리 위치에 입출력장치를 위한 주소 공간을 사용 고립형 입출력 : 메모리를 두 개 사용 (메모리, 입출력장치) → 대신 입출력 전용 명령어를 사용 문제는 주기적으로 장치 컨트롤러에 접근해서 준비 여부를 확인해야함 → 그래서 인터럽트를 사용하기로 함 인터럽트 기반 입출력 순차적으로 처리하는건 현실적이지 않음PIC는 여러 장치 컨트롤러와 ..
보조기억장치 SSD : 플래시메모리 기반 NAND 플래시 : 대용량에 많이 쓰임SLC : 0,1만 저장됨 → 빠르지만 개 비쌈TLC : 느리지만 저렴 MLC : 00, 01, 10, 11 → 시중에서 많이 사용, 수명은 SLC보다 더 짧음 cell에 몇 비트를 저장할 수 있는가? SLC, MLC, TLC, QLC 저장단위 셀 < 페이지 < 블록 < 플레인 < 다이 읽기 쓰기의 단위가 다르다 !!! 읽기 쓰기는 페이지 단위로 이루어짐 + 플래시 메모리는 덮어쓰기가 불가능 삭제는 블록단위로 이루어짐 → 그래서 수정을 하고 싶으면 기존에 페이지를 invalid로 바꾸고 새 페이지를 쓴다 *가비지 컬렉션 → invalid 페이지를 없애기 위해 valid 페이지만 복사해서 새로 쓰고 이전에 블록은 삭제 RAID ..
메모리 RAM DRAM : Dynamic RAM 전력이 있어서 알아서 사라짐 SRAM : Static RAM 안 사라짐, d램보다 빠름 → 캐시메모리 SDRAM : d램의 업그레이드, 클럭 속도랑 동기화 DDR SDRAM : SDRAM의 업그레이드, 대역폭 두개(1차선 → 2차선) DDR2 SDRAM : 2차선 → 4차선, 3는 8개, 4는 16개, 5는 32개?? 주소 공간 : 물리 주소, 논리 주소 → 메모리에 담기는 데이터가 계속 바뀌기 때문에 논리주소 : 0번지가 여러개 있어도 상관 없음 물리주소 : 0번지가 한개라 MMU로 변환해줘야 함 MMU : 논리주소 + 베이스 레지스터로 주소 변환 프로그램의 종류에 따라 베이스 레지스터가 정해져 있음 한계 레지스터 : 다른 프로그램의 영역을 침범하지 않도..
명령어 주소 지정 방식 직접 주소 지정 간접 주소 지정 레지스터 주소 지정 레지스터 간접 주소 지정 스택 주소 지정 변위 주소 지정 : 오퍼랜드 + 레지스터 값 상대 주소 지정 : 오퍼랜드 + 프로그램 카운터 베이스 레지스터 주소 지정 : 오퍼랜드 + 베이스 레지스터(기준 주소) CPU의 내부 구성 ALU ALU : 계산기 역할 플래그 : 연산 결과에 대한 부가 정보(ex 양수 음수) 제어장치 클럭 신호를 받는다 : 시간 단위(박자) 명령어 레지스터를 해석 제어 신호 : cpu 내부 외부에 출력 레지스터 레지스터 : 저장장치 메모리에서 데이터를 가져오는 순서 프로그램카운터 → 메모리 주소 레지스터 → 메모리 버퍼 레지스터 → 명령어 레지스터 *유효주소 : 연산에 사용할 데이터가 저장된 위치 → 명령어 주..