목록CS 기초/운영체제 (7)
교대최소제곱법
이 글은 이전 글인 "[pintOS] 운영체제와 cpu 아키텍쳐의 관계 그리고 펭귄" 의 후속 글 입니다 재밌는 이야기를 보기 전에 이전 글을 보면 더 재밌습니다! https://changjohwang.tistory.com/53 여기서는 정말 재밌는 이야기를 할 것이다 windows와 리눅스 원래 운영체제 시장은 x86 아키텍쳐를 사용한 마이크로 소프트의 Windows가 독점하다시피 하고 있었다 운영체제 = windows가 성립하던 시대였다 하지만 unix의 자손들이 하나 둘 떠오르기 시작되었고 리눅스는 그 중 최고라고 볼 수 있다 우리가 잘 아는 안드로이드, 타이젠도 이 리눅스 기반의 모바일 운영체제이다! 여기에 unix기반의 macOS까지 해서 windows, macOS, linux 삼대장의 시대가 ..
문제 정의 우리가 만든 pintOS는 ec2의 우분투 x86_64 환경 위에서 작동한다 amazon/ubuntu/images/hvm-ssd/ubuntu-bionic-18.04-amd64-server-20230329 이미지를 보면 우분투인 것은 알겠는데 뒤에 amd64가 붙어 있는 것을 볼 수 있다. 그 전에는 운영체제는 소프트웨어고 cpu아키텍쳐는 하드웨어라 연관성을 못 느꼈는데 최근 pintOS를 만들면서 이 둘의 관계가 궁금해졌다 + 사실 친구가 리눅스 마스코트인 턱스가 귀엽다는 말을 해서 리눅스가 궁금해졌다 일단 우분투란 무엇일까? = 우분투는 debian 기반의 linux 배포판이다 그럼 debian이란? = 커뮤니티인 데비안 프로젝트에서 개발하고 있는 linux 배포판 아무튼 우분투는 linux..
디스크 조각모음 보조 기억 장치의 단편화를 해결하기 위한 최적화 프로그램 과거에는 저장장치가 구리고 단편화 문제가 실제로 체감되었기 때문에 디스크 조각모음 프로그램을 따로 설치하여 돌려주고는 했었다. 최근에는 이런 사설 프로그램을 설치할 필요 없이 기본적으로 운영체제에서 해결해준다. 찾아보니까 매주 자동으로 하드디스크를 정리해주는 모양이다. 과거에는 디스크 조각모음이 중요했으나 캐시 메모리의 대형화, 자기 디스크에 대한 기술 발전으로 처리 속도, 저장 용량 등의 성능이 향상되면서 중요성이 다소 떨어졌다. SSD는 디스크 조각모음이 필요없다 정확히는 플래시 메모리 저장매체들은 디스크 조각 모음이 필요없다. 그 이유는 메모리 할당 과정을 통해 알 수 있는데 malloc 구현을 하다보면 find_fit라는 함..
파일과 디렉토리 파일 : 논리적 단위 디렉토리 : 트리 구조 디렉토리 디렉토리 엔트리 : 특별한 파일로 간주 파일에 데이터가 담겨져 있다면, 디렉토리에는 정보가 담기는 거임 파일 이름 + 파일이 보조기억장치에 저장된 위치 파일 할당 방법 연속적 할당 → 외부 단편화 문제 발생 불연속적 할당 연결 할당 : 다음 블록 주소를 저장해서 연결 리스트로 관리 but 순차적으로 접근해야 원하는 부분에 접근할 수 있어 느리다 + 오류 발생시 끝 색인 할당 : 색인 번호를 관리하는 블록을 만든다 파일 시스템 포매팅 : 파일 시스템을 결정함 FAT 파일 시스템 : 블록 주소를 테이블(FAT)로 관리 루트 디렉토리 → 하위 디렉토리 → 첫 번째 블록 주소 발견 → FAT에서 다음 주소 발견 → … 유닉스 파일 시스템 : ..
메모리 할당 스와핑 : 안 쓰는 메모리를 보조기억장치로 보내는 방법 → 요구하는 메모리가 실제 메모리보다 크더라도 실행 가능 but 애초에 덩어리가 커버리면 실행 불가함 메모리 할당 알고리즘 최초 적합 / 최적 적합 / 최악 적합 : 다 비효율적임 → 외부 단편화 때문에 *외부 단편화 : 메모리 사이사이 공간이 발생, 메모리 낭비 외부 단편화 해결방법 메모리 압축 : 잘 안씀 페이징(goat) 페이징 모든 프로세스를 페이지라는 일정한 크기로 짜르고 메모리를 프레임으로 일정하게 짤라서 할당 페이지 단위로 스와핑도 가능(페이지 인, 페이지 아웃) = 프로세스에서 필요한 페이지만 담으면 되는거 아님? → 큰 프로세스도 실행 가능 또한 메모리에 불연속적으로 흩어 놓아 저장 가능 → 순차적 실행에 어려움이 있음 ..
CPU 스케쥴링 우선순위 : 입출력 작업이 많은 프로세스 > cpu 작업이 많은 프로세스 스케쥴링 큐 : 자원마다 큐를 생성 → 순서대로 나가는건 아님 대표적으로 준비 큐, 대기 큐 가 있다 선점형, 비선점형 스케쥴링 선점형 : 이미 사용하고 있어도 시간이 지나면 빼앗아서 사용 → 오버헤드가 많이 발생 *오버헤드 : 프로세스 처리를 위해 간접적으로 들어가는 시간 비선점형 : 앞 프로세스가 종료나 대기가 되어야 사용 스케쥴링 알고리즘 선입선처리 : 비선점 최단작업 : 선점 or 비선점 라운드 로빈 : 선입 선처리 + 타임 슬라이스 → 선점형 = 타임 슬라이스의 크기가 매우 중요하다 최소 잔여 시간 우선 : 최단 작업 + 라운드 로빈 우선 순위 : 기아 현상 → 우선 순위가 낮은 프로세스는 끝도 없이 밀림 ..
모든 프로그램은 실행을 위해 자원을 필요로 한다 커널 영역에 적재되는 프로그램 오류메세지에 대한 깊은 이해가 가능하다 커널 : 핵심적인 서비스를 담당하는 부분 유저 인터페이스는 커널이 아님 이중모드 : 플래그로 구별 가능, 사용자모드 vs 커널모드 시스템 호출 : 커널모드로 전환하기 위한 방법 → 소프트웨어 인터럽트 프로세스(실행 중인 프로그램) 관리 자원 접근 및 할당 : cpu 스케쥴링, 메모리(페이징, 스와핑), 입출력장치 파일 시스템 관리 프로세스 프로세스 제어 블록 PCB : 프로세스 관련 정보를 저장하는 자료 구조 → 커널 영역에 저장 프로세스 ID (PID) 레지스터 값 : 자신의 실행 차례가 오면 이전에 사용한 레지스터 값을 복원해 실행을 재개하기 위해 저장 프로세스 상태 cpu 스케쥴링 ..