[Philosophers] 변수 및 허용 함수 정리
·
42Seoul/Philosophers
변수 number_of_philosophers : 철학자 수(+ 포크의 수) time_to_die : 지난 번 식사로부터 식사를 마칠 때까지 남은 시간. time_to_eat : 밥 먹는 데 걸리는 시간. 두 개의 포크를 사용해야 한다. time_to_sleep : 잠자는 데 걸리는 시간. number_of_times_each_philospher_must_eat : 옵션이며, 식사 횟수가 이 변수의 값과 같아지면 프로그램 종료. 허용 함수 usleep 마이크로초 단위로 측정한 간격 동안 쓰레드 실행을 일시 중단한다. #include #include intmain(int argc, char *argv[]) { printf("1초마다 출력 합니다.\n"); for (int i = 0; i < 10; i++)..
[Philosophers] 식사하는 철학자들 문제
·
42Seoul/Philosophers
https://ko.wikipedia.org/wiki/%EC%8B%9D%EC%82%AC%ED%95%98%EB%8A%94_%EC%B2%A0%ED%95%99%EC%9E%90%EB%93%A4_%EB%AC%B8%EC%A0%9C 식사하는 철학자들 문제 - 위키백과, 우리 모두의 백과사전 원탁에 둘러앉은 다섯 명의 철학자와 다섯 접시의 스파게티, 그리고 다섯 개의 포크 식사하는 철학자들 문제는 전산학에서 동시성과 교착 상태를 설명하는 예시로, 여러 프로세스가 동시에 돌 ko.wikipedia.org 식사하는 철학자들 문제는 전산학에서 동시성과 교착 상태를 설명하는 예시로, 여러 프로세스가 동시에 돌아갈 때 교착상태가 나타나는 원인을 직관적으로 알 수 있다. 교착상태 : 두 개 이상의 작업이 서로 상대방의 작업이 끝..
[Minishell] 터미널 제어
·
42Seoul/Minishell
https://hyeonski.tistory.com/5?category=471028 [C/UNIX] 개행 없이 한 글자씩 입력받는 getch() 만들기 (터미널 제어) 프롬프트 또는 콘솔 환경을 만들기 위해서 키보드 입력을 한 자씩 받아야할 때가 있다. unistd.h의 read함수를 STDIN에서 1바이트만큼 받으면 되지 않을까? 해서 다음과 같은 코드를 실행해보았다. #in hyeonski.tistory.com https://man7.org/linux/man-pages/man3/termios.3.html termios(3) - Linux manual page termios(3) — Linux manual page TERMIOS(3) Linux Programmer's Manual TERMIOS(3) N..
[Minishell] signal
·
42Seoul/Minishell
minishell 허용함수 정리 편에서 대략적인 함수 정리를 해놓았지만 좀 더 자세히 알아보자. signal(시그널) 여러가지 시그널 중 몇 가지만 알아보자. 1. SIGHUP : 터미널과 연결이 끊겼을 때 발생. 기본적인 처리는 프로세스가 종료된다. 2. SIGINT : 인터럽트가 발생했을때 발생. 기본적으로 프로세스가 종료된다. 9. SIGKILL : 프로세스를 무조건 종료한다. 절대 무시할 수 없으며 제어할 수 없다. 11. SIGSEGV : 프로세스가 잘못된 메모리를 참조했을 때 발생. 코어덤프를 남기고 종료된다. 19. SIGSTOP : 프로세스를 중단시킨다. 종료된 상태가 아니며 제어할 수 없다. 프로세스가 시그널을 받게되면 시그널에 해당되는 기본 동작을 하거나 그 시그널을 무시하거나 사용자가..
[Minishell] 허용 함수 정리
·
42Seoul/Minishell
기본적으로 알고있는 함수들을 제외하고 minishell을 만들 때 필요한 함수에 대해 정리해보자. fork #include pid_t fork(void); fork는 자식프로세스를 만들기 위해 사용되는 함수이다. fork에 의해 생성된 자식 프로세스는 자신만의 PID를 갖게 되며, PPID는 부모프로세스의 PID를 가지게 된다. return 성공할 경우 자식프로세스 PID가 부모에게 반환, 자식에게는 0 반환 실패할 경우 -1 리턴, error에 따른 errno 값 설정 error EAGAIN 자식프로세스를 위한 task 구조체를 할당할 수 없을 경우, 메모리 문제와 관련 wait #include #include pid_twait(int *stat_loc); 주로 fork() 를 이용해서 자식 프로세스(..
[Minishell] Shell이란?
·
42Seoul/Minishell
Minishell As beautiful as a shell 요약: 이번 프로젝트의 목표는 간단한 셸을 만드는 것입니다. 맞아요. 당신만의 작은 bash나 zsh이요. 프로세스나 파일 디스크립터에 대해 아주 많이 배우게 될 겁니다. 간단한 쉘 만들기 프로젝트인 minishell을 위해 쉘에 대해서 알아보자. Shell(셸/쉘)이란? 셸은 운영체제 상에서 다양한 운영 체제 기능과 서비스를 구현하는 인터페이스를 제공하는 프로그램이다. 셸은 사용자와 운영 체제의 내부(커널) 사이의 인터페이스를 감싸는 층이기에 껍데기라는 의미의 셸의 이름이 붙었다. 셀은 일반적으로 명령 줄과 그래픽 형의 두 종류로 분류된다. 명령 줄 셸은 운영 체제 상에서 CLI(Command Line Interface)를 제공하는 반면에, ..
[Libasm] syscall error 처리
·
42Seoul/Libasm
error 처리 외부 함수인 ___error를 사용해서 errno 값을 세팅 errno는 가장 최근 에러의 번호를 담는 integer 타입 변수이다. 프로그램이 시작되면 errno는 0으로 초기화 된다 에러가 생기면 시스템 콜 함수는 NULL 또는 -1을 반환한다 에러 타입을 파악하기 위해 외부 변수 errno에 에러 번호가 담긴다 man errno /* ... When a system call detects an error, it returns an integer value indicating failure (usually -1) and sets the variable errno accordingly. Successful calls never set errno; once set, it remains u..
[Libasm] 어셈블리 변수, 명령어 및 프로그램 구조
·
42Seoul/Libasm
어셈블리 변수 data type size BYTE 부호 없는 1byte WORD 부호 없는 2byte DWORD 부호 없는 4byte QWORD 부호 없는 8byte 어셈블리 산술 연산 명령어 수행내용 참고 MOV a, b a = b (b를 a에 대입(복사) ADD a, b a += b SUB a, b a -= b INC a a += 1 기계코드 크기가 ADD, SUB 보다 더 작다 DEC a a -= 1 기계코드 크기가 ADD, SUB 보다 더 작다 movzx a, b a가 b보다 큰 공간이어도 복사가 되고, 남는 공간은 0으로 채워짐 부호가 없는 정수에만 사용 movsx a, b 남는 공간이 1로 채워짐. 부호가 있는 정수에만 사용 어셈블리 조건 지시 정의 플래그 JMP 무조건 분기 명령을 실행 J ..
WONILLISM
'42Seoul' 카테고리의 글 목록