SW 19

DMA

https://www.idec.or.kr/vod/apply/view/?pay=&search_val=amba&no=257AMBA AXI 설계와 검증 아이덱 강의DMA(Direct Memory Access, 직접 메모리 접근)는 CPU의 개입 없이 메모리와 외부 장치간에 데이터를 직접 전송하는 기능을 제공하는 하드웨어 모듈이다.기존에 메모리의 값을 외부 장치에 전송하기 위해서는 어떻게 했을까?core에서 load instruction을 읽어온다.이 load명령에 의해 메모리에 접근해 데이터를 가져온다.버스를 통해 (amba axi) 데이터를 가져오고, 그 데이터를 core에 레지스터(x1~x15)에 넣는다.레지스터에 저장된 메모리값을 외부 장비에 쓴다.즉, DMA를 사용해야한다. CPU가 DMA 컨트롤러(D..

SW/MCU 2025.03.30

System Call

3/37(시스템콜)프로세스부터 시작해서 시스템콜까지.운영체제(OSTEP 4,5 복습)작업관리자 열면 →프로세스가 다 뜬다.컴퓨터가 한번에 하나만 실행하지만 이렇게 멀티태스킹이 된다. WHY?CORE가 1개여도 TIME DIVISION을 사용해서 멀티태스킹을 구현한다.(time sharing)virtualizing(pc가 1개여도 환상을 보여준다)멀티태스킹을 구현하기 위하여 mechanisms, policies를 고려해야함.mechanisms : 어떻게 멀티태스킹을 구현?policies : ready, run 상태 알고리즘을 어떻게?프로세스 : 실행되고있는 프로그램time sharing : core가 하나여도 프로세스를 여러개 사용할 수 있는것.프로그램은 1개인데 프로세스는 여러개 만들 수 있는 one t..

ls 명령어

3/20 (ls명령어)메타데이터를 가져오는게 목적.ls -al : 다양한 정보들 나오는데 이거를 구현해보자.인자별로 기능이 다르다.인자를 모를경우?구글링을 한다.man 메뉴얼을 본다.help 명령어를 친다. // ls —help저번시간에 파일을 열었으니 이번시간에는 이것들을 진행디렉토리를 열기파일의 메타데이터 가져오기디렉토리를 열면 엔트리가 있고 이거를 싹다 읽으면 끝나게 된다. 마지막에 디렉토리 닫는다.open dirread dirclose dir디렉토리 엔트리inode : 디렉토리의 id번호가 부여되는데 그것.일단은 이름만 출력되게 만들었다.(1번버전)읽어온 다음에 readdir이 되면 계속 쓴다.ls -al리눅스에서 심볼릭링크, 하드링크라는 개념이 있는데 그것도 존재.그룹파일 사이즈마지막으로 수행된..

who command

who command목적 : 현재 로그인 되어 있는 유저 정보를 모두 출력하기output : user name, terminal, time, from wherewhoami를 사용하여 볼 수 있다.who command를 어떻게 사용할까?→manual을 참조해라!man who여기서 알수있는 사실 : who는 /var/run/utmp에서 파일을 불러온다man 명령어는 여러가지 specific sections이 있고, 이걸 사용해야 작동한다.1 general commands2system calls3C library functions4Special files5File formats and conventions6games7miscellaneous8sys admin commands and daemons(1) 사용자 ..

Linux 커널

리눅스 커널은 운영체제의 핵심 부분으로, 하드웨어와 사용자 프로그램 사이에서 자원을 관리하고 시스템을 운영하는 역할을 한다. 주요 기능은 다음과 같다.프로세스 관리: CPU 스케줄링, 멀티태스킹, 프로세스 생성/종료 등을 담당한다.메모리 관리: 가상 메모리, 페이지 테이블, 캐시 관리 등을 수행한다.파일 시스템: 다양한 파일 시스템(ext4, XFS, Btrfs 등)을 지원하고 입출력을 처리한다.디바이스 드라이버: 하드웨어와 소프트웨어 간 인터페이스를 제공하며, 드라이버 모듈을 통해 확장 가능하다.네트워킹: TCP/IP 프로토콜 스택을 포함하여 네트워크 통신을 지원한다.이 커널에서 지원하는 low level의 시스템 관리 함수를 활용하여 저수준 프로그래밍을 하는 것이 시스템 프로그래밍이다. 커널은 시스템..

17-1 구조체

구조체는 사용자가 만드는 자료형이다.#include struct student{ int num; double grade;};int main(){ struct student s1; s1.num=2; s1.grade=2.7; printf("학번 : %d\\n",s1.num); printf("학점 : %.1lf\\n",s1.grade); return 0;}구조체 변수의 크기패딩바이트를 넣어서 가지런하게 정렬(바이트 얼라인먼트)를 한다.구조체에 있는 변수중 가장 크기가 큰 변수를 기준으로 패딩비트를 채워넣는다.구조체포인터와 →연산자#include struct score{ int kor; int eng; int math;};int main(){ st..

SW/C 2025.03.30

13-2 함수의 데이터 공유 방법

값을 복사하여 전달하는 방법main: mov r0, #10 ; x 값을 r0에 저장 mov r1, #20 ; y 값을 r1에 저장 bl func ; 함수 호출 (r0, r1에 값 전달) bx lr ; 리턴func: add r0, r0, #1 ; a = a + 1 (r0 값을 변경) bx lr ; 리턴 (원래 함수로 복귀)메모리에 저장되어있는 값을 레지스터에 복사하고 이거를 인자로 보내는 것이므로 값을 복사하여 전달하는 방식인것이다.주소를 전달하는 방식void add_ten(int *pa);

SW/C 2025.03.30

12-1 문자열과 포인터

printf("%s", "apple");이렇게 쓸 경우 a,p,p,l,e에 해당되는 주소값이 각각 저장되고 마지막에 널값도 들어간다.apple은 배열에 저장되는 것이다.“”를 사용하여 문자열을 만들면 이것은 배열로 저장이 되는 것이다.따라서 이런 형식이 가능하다.char *dessert = "apple";dessert = "banana";띄어쓰기 포함해서 문자열에 저장하기gets(str);버퍼에는 개행이 그대로 들어가지만 배열에 저장될때 널문자로 바껴서 저장된다.따라서 다음상황에서 버퍼를 지워줘야함.scanf("%d",&age);gets(name);//scanf는 개행문자(화이트스페이스)를 제외하고 버퍼를 비운다. 근데 gets는 개행문자가 있으면 널문자로 바꾼다.scanf와 gets함수는 입력되는 문자..

SW/C 2025.03.30

11-2 버퍼를 사용하는 입력함수

scanf 특징화이트스페이스를 구분하여 작동한다.scnaf("%d%d",&a, &b);scanf("%d %d",&a,&b);둘은 다른거다!!중간에 화이트스페이스 개수만큼 허용하는 것이다.버퍼키보드에 입력하는 데이터는 일단 버퍼에 저장된 후 scanf함수에 의해 변수에 입력된다.#include int main(){ char ch; int i; for(int i=0;i이 예제는 문자를 입력하고 화면에 출력하는 과정을 세번 반복한다.그러나 실행 결과는 한 번의 키보드 입력으로 끝난다!!!→최초 scanf 함수가 호출될 때 키보드로 문자열을 입력하면 일단 버퍼에 저장한다. 버퍼에 남아있는것들을 우선적으로 채워넣고, 버퍼에 없을 경우 새로 입력받는다.따라서!!입력데이터를 하나 입력하고 엔터를 입력..

SW/C 2025.03.30