운영체제 컴퓨터 구조 파트에서 학습한 리소스들은 누가 움직이게 만들까 : 운영체제 - 자원을 관리하고 할당하는 특별한 프로그램 - windows, macOs, Linux, android, ios 등등
메모리 내에 운영체제가 적재되는 공간이 따로 있음 : 커널 영역 : - 메모리 할당, 반환 / CPU 할당, 반환 / 디스크 할당, 반환 - 나머지 영역 : 사용자 영역 : 우리가 쓰는 공간
- 하드웨어와 프로그램 사이에 있는 느낌! : 나라로 보면 정부라고 생각하자!!! 그러면 이해가 잘 된다. - 여러 부분별로 나누어진 서비스를 제공해줌. 자원관리 등등!
커널? : 운영체제의 핵심부 - 리눅스 운영체제의 커널 소스코드 : https://kernel.org/ - 리눅스운영체제는 오픈 소스이다. - 파일 시스템, 프로세스 관리, 네트워크관리, 메모리 관리 등등 - 커널 == 운영체제라고 신경쓰면 됨
운영체제중에 커널이 아닌 것 : 사용자 인터페이스
개발의 편의를 제공하는 운영체제 - 모든 응용프로그램은 자원(하드웨어)에 직접 접근 X - 응용프로그램은 운영체제를 통해서만 접근이 가능하다. 하드디스크에 접근하려면 무조건 한번 거쳐야한다! - 문지기 역활이라고 보자
이중모드 - 커널 모드: 운영체제 서비스를 제공받을 수 있는 모드 (입출력 가능) - 직접적 자원 접근 X 커널영역에 접근을 해야 가능함 - 사용자 모드: 운영체제 서비스를 제공받을 수 없는 모드 (입출력 불가능)
- 여러 단계로 나눈 권한: 보호 링(protection ring) 으로 발전
- 시스템 콜: 운영체제 서비스를 제공받기 위해 커널 모드로 전환하는 것 사용자 모드에서 운영체제 서비스를 받기 위해 커널 모드로 전환!!!!!! - 소프트웨어 인터럽트의 일종
운영체제의 서비스 : 커널이 제공해주는 핵심적인 서비스! - 프로세스 관리
- 자원 관리 접근 및 할당 : cpu, 메모리, 보조기억장치&입출력장치 - 파일 시스템 관리 - 파일 시스템 / 파일/디렉터리
[실습] 가상 머신에 리눅스 설치
가상 머신 virtual box : https://www.virtualbox.org/ - 이 위에, 리눅스, 오븐투라고 하는 리눅스 운영체제 설치 - 가상 머신 : 프로그램적으로 만들어진 가상의 컴퓨터 - 가상 머신 위에 윈도우, 오븐투 등의 운영체제를 설치 가능 -> 컴퓨터안에 컴퓨터를 생성
- virtual box 7.1 windows host 로 설치
운영체제의 이미지 파일도 준비를 해야함 - ubuntu 설치 : https://ubuntu.com/download - ubuntu라고 하는 리눅스를 가상머신위에 설치를 할 거임 - ubuntu 24.04.1 설치
실습 - VirtualBox 설치
- ubuntu 올리기 새로만들기 누르기가상 머신 이름 지정이랑 ISO 이미지 지정
무인 설치 건너뛰기 후에 다음 버튼
- 컴퓨터 환경에 따라 cpu 1~2개 선택 - 메모리는 기본으로 - 가상 하드 디스크도 기본으로
확인 후 완료 누르기 - 가상머신 생성 완료 - 실제 운영체제 설치 시작 누르기
시작하여 try or install 누르기 - 언어를 영어로 설정하고 install 을 누르기 - Minimal installation을 선택해도 됌 - 직접 구획하고 설정하기 : 파티셔닝 가능 - 자동설정으로 설정하여 설치 - 호스트이름과 비밀번호 설정하기 - restart now 하면 재설정됨
strace 기반 시스템 콜 관찰
strace : 시스템 콜을 추적하기 위한 도구 - 어떤 명령어, 프로그램의 시스템 콜을 알 수 있음 - 제대로 공부하고 싶으면 man strace를 학습하기!!!!!!!man(manual의 약자)
- 설치 방법 : # apt-get install strace , (# apt-get update)
- 기본 사용법 1. $ strace COMMAND - ls : 현재 폴더의 파일과 폴더를 조회하라 (명령여, bin에 있는 프로그램이다.) - pwd : 현재 경로 출력 (명령어) 2. $ strace -p PID - $ strace -p 123의 식으로 사용함 - , PID는 고유한 번호 3. $ strace ls
- 호출결과 - $ strace -o output.txt ls : 시스템 호출 결과를 콘솔에 출력하지 않고 파일로 저장 -$ strace -c ls :시스템 호출 요약 결과 출력 - $ strace -e trace=open,read ls : 실행 파일의 시스템 호출 결과 필터링 - 너무 많이 호출하면 성능이 저하, 그 때 사용됨
- 시간과 시스템 호출 결과 출력 - $ strace -t ls : 타임스탬프 -$ strace -tt ls 밀리세턴드 타임스탬프 -$ strace -T ls 각 시스템 호출 소요 시간
open : 파일을 여는 시스템 콜. 파일 디스크립터 반환. * 파일 디스크립터(file descripter) – 파일을 가리키는 고유한 값 - 리눅스 환경은 file을 굉장히 특별하게 봄( 디렉터리, 장치, 소켓 등등 모두 파일로 간주) - 굉장히 많이 사용되는 시스템 콜
close : 파일을 닫는 시스템 콜 (파일 관련 자원 해제)
read : 파일 디스크립터에서 데이터를 읽어들이는 시스템 콜
write : 파일 디스크립터에 데이터를 쓰는 시스템 콜
fork : 프로세스 복제하여 자식 프로세스 생성 / 복제된 프로세스를 다시 프로세스로서 생성 - 프로세스들이 계층적으로 구성되는 원리 ( 부모프로세스와 자식 프로세스가 있다.)
exec : ( execl, execle, execlp, execv, execve, execvp) - 자식 프로세스로 하여금 다른 코드를 실행토록 하기 - 현재 프로세스의 주소 공간을 새로운 프로세스로 덮어쓰기
getpid : PID를 반환하는 시스템 콜 : pid가 무엇인지 알고 싶을때 사용하면 됨 - pid는 프로세스가 가진 고유한 값,