일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- defee
- CSS
- Flutter
- 백준
- 사이드프로젝트
- 코드트리
- TiL
- 알고리즘
- 스택
- 티스토리챌린지
- HTML
- 크래프톤 정글
- 소켓
- 핀토스
- userprog
- corou
- Java
- 나만무
- 시스템콜
- 모션비트
- 리액트
- 오블완
- JavaScript
- pintos
- 자바
- 큐
- Vue.js
- 크래프톤정글
- 자바스크립트
- 4기
- Today
- Total
목록시스템콜 (7)
미새문지
syscall.c 더보기 #define MSR_STAR 0xc0000081 /* 세그먼트 셀렉터 MSR, 64비트 모드로 전환할 때 사용되는 셀렉터를 저장 */ #define MSR_LSTAR 0xc0000082 /* 롱 모드 SYSCALL 목표 주소를 저장하는 MSR */ #define MSR_SYSCALL_MASK 0xc0000084 /* 실행 시 EFLAGS 레지스터에 적용될 마스크를 저장한다. */ MSR_STAR (0xc0000081) : 시스템 콜이나 리턴 시 CS와 SS 세그먼트 레지스터를 로드하는데 사용 MSR_LSTAR 0xc0000082 : 64비트에서 syscall 명령어가 실행될 때, CPU는 이 레지스터에 저장된 주소로 점프MSR_SYSCALL_MASK 0xc00..
Krafton Jungle Week 8~9 Team 6 WIL Argument Passing project2의 메인인 시스템 콜을 만들기에 앞서 Argument Passing을 구현해야 했다. Argument Passing이란, main 함수로 들어오는 명령어를 구분하여 인자로 전달하는 것이다. 우선 init.c 안에 있는 main() 함수의 read_command_line() 함수가 커맨드라인으로 들어오는 인자를 받아와 저장한다. (예: -q -f put args-single run 'args-single onearg') 이 후 일차적으로 파싱을 통해 -q와 -f등의 플래그들을 제거한 후 남은 부분을 run_actions로 전달해준다. run_actions -> run tasks 등을 거쳐 args-s..
fsync() 프로그램이 파일 시스템에 데이터를 안전하게 저장하도록 보장하는 데 사용되는 시스템 호출 중 하나이다. 이 함수는 특정 파일의 변경 사항이 디스크에 완전히 쓰여지도록 하여, 시스템 충돌이나 전원 문제 등 예기치 않은 상황에서도 데이터의 손실을 방지하는데 중요한 역할을 한다. fsync()의 작동 원리 호출과 실행 프로그램이 fsync() 함수를 호출하면, 해당 함수는 인자로 받은 파일 디스크립터가 가리키는 파일에 대한 모든 미완성 I/O 작업(입력/출력 작업)을 완료시킨다. 데이터 및 메타 데이터의 동기화 fsync()는 파일의 데이터 뿐만 아니라 메타 데이터(예 : 파일의 수정시간)까지 디스크에 쓰도록 보장한다. 이는 파일 시스템의 일관성을 유지하는 데 중요하다. 성공 및 실패 작업이 성공..
System Call(시스템 콜) 어플리케이션 혹은 사용자 프로그램이 운영체제의 핵심 기능을 사용하기 위해 커널에 요청을 보내는 인터페이스 즉, 사용자 모드에서 실행되는 프로그램이 시스템의 하드웨어 자원이나, 운영체제가 제공하는 낮은 수준의 서비스를 이용하고자 할 때 사용된다. 시스템 콜의 필요성 컴퓨터 시스템은 보안과 안정성을 위해 유저 모드(User Mode)와 커널 모드(Kernel Mode) 두 가지 실행 모드를 구분한다. 유저 모드에서 실행되는 프로그램은 직접 하드웨어를 제어할 수 없으며, 이러한 제한은 시스템이 보안을 유지하고, 잘못된 프로그램이 시스템에 해를 끼치는 것을 방지하기 위함 따라서 하드웨어 자원에 접근하거나 운영체제의 특정 기능을 이용하고자 할 때는 시스템 콜을 통해 커널에 요청을..
파일 디스크립터 운영체제가 프로세스에서 파일, 소켓 파이프 등을 추적하기 위해 사용하는 추상적인 표현이며, 각 열린 파일이나 I/O 채널에 대해 고유한 정수 값을 할당하는 것 파일 디스크립터는 운영체제의 리소스를 추상화해 프로세스가 이를 효율적으로 사용할 수 있도록 돕는 중요한 메커니즘이며, 리눅스나 유닉스 같은 운영체제에서는 표준입력(0), 표준출력(1), 표준오류(2) 등 기본적인 I/O 채널에 대한 파일 디스크립터가 미리 정의되어 있다. 시스템 콜 유형 프로세스 제어(process Control) - 중요 프로세스 실행, 생성, 대기 등 fork() 현재 실행 중인 프로세스의 복제본을 생성하는 역할을 한다. 성공적으로 수행되면, 부모 프로세스에게는 자식 프로세스의 PID를, 자식 프로세스에게는 ..
예외적인 제어 흐름(Exceptional Control Flow, ECF) 시스템들은 내부 프로그램 변수에 의해 표시되지 않으며, 프로그램의 실행과는 반드시 관련되어 있지 않은 시스템 상태 변화에도 반응할 수 있어야 한다. 사용자가 특정 명령어나 요청을 내릴 경우, 시스템은 이에 대해 특정한 방식으로 반응하는데, 정상적인 흐름이 아닌 경우를 말한다. 예외 상황(Exception) 하드웨어와 운영체제에 의해 구현된 예외적인 제어 흐름의 한 형태로 이해할 수 있다. 이는 프로세서 상태의 변화에 대응해 제어 흐름이 급격하게 변경되는 상황을 말한다. 프로세서가 특정 이벤트 발생을 감지하면, 예외 테이블이라는 점프 테이블을 통해 이 특정 종류의 이벤트를 처리하기 위한 운영체제의 서브루틴인 예외 처리 핸들러로 ..
실행 흐름 우리가 개발하는 프로그램은 일반적으로 유저 모드에서 실행된다. 프로그램 실행 중에 인터럽트(interrupt)가 발생하거나 시스템 콜(system call)을 호출하게 되면 커널 모드로 전환된다. 전환된 커널 모드에선 프로그램의 현재 cpu상태를 저장하고, 인터럽트나 시스템 콜을 직접 처리하게 된다. 그리고 처리가 완료되면 중단됐던 프로그램의 cpu 상태를 복원하고 다시 유저 모드로 전환되며 프로그램이 이어서 실행된다. 커널(kernel) 운영체제의 핵심이며, 이를 규정짓는 매우 중요한 소프트웨어. 시스템의 전반을 관리/감독하는 역할이다. 하드웨어의 자원을 자원이 필요한 프로세스에 나눠주고, 프로세스 제어, 메모리 제어, 시스템 콜 등을 수행하는 부분으로 운영체제의 가장 아래 계층에서 돌아간다..